image.png

我的理解中,机器学习的核心本质就是矩阵,Matrix。因为我们抽象世界中的一切,几乎都可以抽象为一个向量,对于机器而言,我只需要根据已有的数据集训练出精准的对向量方向的划分,就可以对新数据进行分类或者回归。

The Matrix,黑客帝国。

母体所构建的世界,就是一个庞大的矩阵世界,其中的每一个人都是一个向量,“Oracle”先知就在进行类似分类回归的操作,而“系统工程师”则是多次编写了让母体进行学习的算法。

我就是这里的设计师,Matrix是我设计出来的,我一直在等你,你会有很多的问题,虽然程序改变了你的意识,但你仍旧是人类,所以在我给你的答案中你只能理解其中的一部分,一般来说,你的第一个问题可能是最有关系的,但你可能没意识到,那同时也是最不相关的问题。

你的生命,是Matrix的程序中一些不等式的残留部分的总和,你是异常程序的最终形式,无论我怎么努力,我一直无法通过别的办法删除它,否则的话,Matrix就是一个精确数学的完美融合,纵使不可避免,但也还是在我们的掌握之中的,所以...你就到了....这里.

为什么说矩阵是机器学习的核心?

在我们常见的机器学习应用领域中,不论是个体识别,人脸识别,指纹识别,数字识别等等,最关键的核心都是“特征点”,或者说能从数据集中抽象出来的“特征”。

对于鸢尾花来说,它的特征点就是萼长、萼宽、瓣长、瓣宽。

通过这四个属性,我们就可以将它抽象成一个四维指定方向的向量,如果要对比两朵鸢尾花的相似程度,那本质上只是对比它们向量间夹角的大小,当然,不同特征需要有权重,一些更加突出的特点,应当在这个向量方向有更高的比例,来保证对夹角的影响更大。

为了演示,我这里使用sklearn包中的鸢尾花数据集进行一个简单演示。

from sklearn.datasets import load_iris
iris = load_iris()

先导入鸢尾花的数据,此处加了一个断点,来看看加载的数据。

里面需要关注的是data和target两个属性,分别代表了特征数据,以及结果,机器需要借此来进行学习。

如果说使用手动下载的数据集文件,格式如下,一行中包含特征数据和结果,需要自行加载处理。

有了特征数据,就可以使用matplotlib进行可视化处理了,

from matplotlib import pyplot
from sklearn.datasets import load_iris

iris = load_iris()
setosa_sepal_len = iris.data[:50, 0]
setosa_sepal_width = iris.data[:50, 1]

versi_sepal_len = iris.data[50:100, 0]
versi_sepal_width = iris.data[50:100, 1]

vergi_sepal_len = iris.data[100:, 0]
vergi_sepal_width = iris.data[100:, 1]

pyplot.scatter(setosa_sepal_len, setosa_sepal_width, marker = 'o', c = 'b',  s = 30, label = 'Setosa')
pyplot.scatter(versi_sepal_len, versi_sepal_width, marker = 'o', c = 'r',  s = 50, label = 'Versicolour')
pyplot.scatter(vergi_sepal_len, vergi_sepal_width, marker = 'o', c = 'y',  s = 35, label = 'Virginica')
pyplot.xlabel("sepal length")
pyplot.ylabel("sepal width")
pyplot.title("sepal length and width scatter")
pyplot.legend(loc = "upper right")
pyplot.show()

可以看到单单从萼长、萼宽两个维度,我们就可以大致划两条直线,将三种花进行区分。

对于更复杂的数据,我们只需要从更多的特征点入手,也就是更多了向量维度,配合更适合的算法,就可以完成识别。

机器学习分类

1. 监督学习

我们给机器的训练数据集拥有“答案”,也就是上文鸢尾花数据所加载的target,机器通过数据来学习正确答案的计算方法。

比如我们想让机器去识别数字时,需要让机器先通过mnist数据集来学习一个数字常见的写法。

不同于鸢尾花数据,图像识别的数据集更多的时像素点的形式,有点是灰度值,有些是RGB值。

官网提供了手写数字的数据集的图像数据和标签,测试集的图像数据和标签。

http://yann.lecun.com/exdb/mnist/

人类已经对数据按照答案进行了划分操作,也就是进行了监督。

2. 非监督学习

非监督学习中,给定的数据集没有“正确答案”,所有的数据都是一样的。需要机器根据特征点进行划分,通常会划分为两类数据,也就是所谓的聚类分析。

最常见的应用就是在电商网站,推荐系统以及异常检测。

3. 半监督学习

半监督学习是指一部分数据拥有标记,而另一部分数据存在缺失。

通常可以使用非监督学习的方式对缺失标记的数据进行处理,让整个数据集变成一个监督学习的模式再处理。

4. 增强学习

增强学习中,机器会根据周围的情况,采取行动,根据采取行动的结果,学习行动的方式。

最适合的应用就是机器人领域,典型的案例AlphaGo。

待完成

算法训练方式
线性回归监督学习
逻辑回归监督学习
线性判别分析监督学习
决策树监督学习
朴素贝叶斯监督学习
K邻近监督学习
学习向量量化监督学习
支持向量机监督学习
随机森林监督学习
AdaBoost监督学习
高斯混合模型非监督学习
限制波尔兹曼机非监督学习
K-means聚类非监督学习
最大期望算法非监督学习

Q.E.D.


Talk is cheap, show me the code.