我的理解中,机器学习的核心本质就是矩阵,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.