覃秉丰机器学习_概述

因此覃秉丰的机器学习视频还是比较不错的,所以学习一下,写个几篇博客做个个人笔记,就这样而已。

 

 Q:人工智能和机器学习深度学习之前的关系。

对于数据集比较小的情况机器学习效果要好于深度学习

 

 Q:训练集,验证集,测试集

 

 

 Q:有监督学习,无监督学习,半监督学习


监督学习(supervised learning)是指用已经标记好的数据(labelled data),做训练来预测新数据的类型(class),或者是值。预测已有类型叫做分类(classification),预测一个值叫做回归(regression)。

无监督学习(unsupervised learning)是指不需要提前对数据做标记,直接对它们做聚类(clustering)。

更多的内容看我的另一篇文章:有监督学习和无监督学习

那么什么是半监督学习(semi-supervised learning)呢?其实就和它的名字一样,同时用了有监督学习的方法和无监督的方法,更准确的说是同时用了标记好的数据(labelled data)和未标记的数据(unlabelled data) 。总结上面所说的监督学习用于分类和回归,无监督学习用于聚类,那么半监督学习的目的是什么呢?目的是用现有的数据训练出更好的数据模型。要知道,现在占主导地位的还是有监督学习,如何更好的利用无监督学习还是一个正在研究的话题,之所以需要开发他的原因是我们不需要人工的给数据打标签,这样会非常省事。从这里可以得知,虽然我们现在可以有海量的数据,但是其中只有很少一部分是有标签的。所以半监督学习就是要同时利用有标记的数据和没标记的数据。 举个例子:

 

假设上图中红点和蓝点表示两类数据class1,class2。绿点表示没有被标记的数据。如果现在我们用支持向量机(SVM),仅对有标记的数据分类,那么分割线如左图所示。但是其实真是情况是,如果我们不忽略未做标记的数据,数据的分布其实是如右图所示的。那么一个更好的划分线也应该是如右图所示的垂直线。这就是半监督学习的基本原理。

 Q:聚类,分类,拟合(回归)

 

对于一次函数的拟合使用的是最小二乘法,下面是Python的一个实现demo

 1 import numpy as np
 2 from matplotlib import pyplot as plt
 3 
 4 def fitSLR(X,Y):#使用最小二乘法求一次方程的系数k,b
 5     x_avg = np.sum(X) / len(X)
 6     y_avg = np.sum(Y) / len(Y)
 7     fen_zi, fen_mu = 0, 0
 8     for i in range(len(X)):
 9         fen_zi += (X[i] - x_avg) * (Y[i] - y_avg)
10         fen_mu += (X[i] - x_avg) ** 2
11     k = fen_zi/fen_mu
12     b = y_avg - k * x_avg
13     return k, b
14 def predict(x, k, b):#由k,b,x求y
15     return k * x + b
16 
17 X = [1.5, 0.8, 2.6, 1.0, 0.6, 2.8, 1.2, 0.9, 0.4, 1.3, 1.2, 2.0, 1.6, 1.8, 2.2]
18 Y = [3.1, 1.9, 4.2, 2.3, 1.6, 4.9, 2.8, 2.1, 1.4, 2.4, 2.4, 3.8, 3.0, 3.4, 4.0]
19 
20 k, b = fitSLR(X, Y);
21 print('k = ', k)
22 print('b = ', b)
23 
24 plt.figure()
25 plt.scatter(X, Y)
26 y_max = predict(max(X), k, b)
27 y_min = predict(min(X), k, b)
28 plt.plot([min(X), max(X)], [y_min, y_max], 'r-')#关于plot的用法可以参考https://blog.csdn.net/feng98ren/article/details/79392747
29 plt.show()

下面的demo是关于画图的一个小例子

 1 import numpy as np
 2 from matplotlib import pyplot as plt
 3 X = [1, 2, 3, 4, 6]
 4 Y = [3.1, 1.9, 4.2, 2.3, 1.6]
 5 X = np.array(X)
 6 Y = np.array(Y)
 7 X1 = X * 2
 8 plt.figure()
 9 plt.rcParams['font.sans-serif'] = 'SimHei'#设置中文显示,否则可能无法显示中文或者是各种字符错乱
10 plt.rcParams['axes.unicode_minus'] = False
11 plt.xlabel('x轴标签')
12 plt.ylabel('y轴标签')
13 plt.title('线形图demo')
14 plt.xticks(np.arange(1, 6),['s1','s2','s3','s4','s5'],rotation = 45)#第一个参数是坐标轴各个点位置,第二个参数是x轴下标显示lable参数,rotation代表lable显示的旋转角度
15 plt.plot(X1, Y, 'r--')
16 plt.plot(X, Y, 'b')
17 plt.legend(['线条一', '线条二'])
18 plt.savefig('D:/demo.png')#注意要先保存再show
19 plt.show()
View Code

下面的链接是关于multiply()、dot()、 matmul()、' * '、'@'对于数组和矩阵在运算上体现的是叉乘和点乘的区别的总结

Python numpy 矩阵乘法multiply()、dot()、 matmul()、' * '、'@'辨析

下面是一个关于聚类的demo

   

 1 import numpy as np
 2 from matplotlib import pyplot as plt
 3 from sklearn.cluster import KMeans
 4 
 5 X = np.random.randint(1, 20, [100,2])#产生一个100*2的随机矩阵
 6 print(X.shape)
 7 plt.figure()#默认是figure1
 8 plt.rcParams['font.sans-serif'] = 'SimHei'#保证汉字正常显示出来
 9 plt.rcParams['axes.unicode_minus'] = False
10 plt.title('原图')
11 plt.scatter(X[:, 0], X[:, 1], marker='+', color = 'r')#显示原图
12 plt.xlabel('这是x轴')
13 plt.ylabel('这是y轴')
14 plt.legend(loc = 2)
15 plt.show()
16 
17 plt.figure('figure2')
18 plt.title('聚类后的图')
19 estimator = KMeans(n_clusters= 3)#生成聚成三类的聚类器
20 estimator.fit(X)#聚类
21 label_pred = estimator.labels_# 获取聚类标签
22 x0 = X[label_pred == 0]
23 x1 = X[label_pred == 1]
24 x2 = X[label_pred == 2]
25 plt.scatter(x0[:,0], x0[:, 1],c = 'red', marker= 'o', label = 'label0')
26 plt.scatter(x1[:,0], x1[:, 1],c = 'green', marker= '*', label = 'label1')
27 plt.scatter(x2[:,0], x2[:, 1],c = 'blue', marker= '+', label = 'label2')
28 plt.legend(loc = 2)
29 plt.show()

 

 

 关于Python随机数的使用可以参看这篇博客

我们可以使用pytorch框架对数据进行分类处理,可以参考之这篇博客:

莫烦PyTorch学习笔记(五)——分类

 

posted @ 2019-10-27 19:12  你的雷哥  阅读(1067)  评论(0编辑  收藏  举报