• 覃秉丰机器学习_概述


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

     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学习笔记(五)——分类

  • 相关阅读:
    Sqlserver2005迁移至Oracle系列之二:生成存储过程
    Sqlserver:在sql2005查看索引的碎片统计情况,并给出处理意见的自动化批处理脚本
    Sqlserver:利用Sqlserver2005的数据库触发器开发的数据库审核追踪系统,可以跟踪对象的修改信息及修改源代码
    Sqlserver2005迁移至Oracle系列之一:生成表
    中国软件业的现状浅析
    Java之异常与错误的区别及java的异常体系
    SQL优化34条
    swftools转换文件时线程堵塞问题的解决方法
    中国软件开发需要注意的地方
    Flex 应用内存泄露的分析与诊断
  • 原文地址:https://www.cnblogs.com/henuliulei/p/11748555.html
Copyright © 2020-2023  润新知