什么是机器学习?我们把它分成两部分看:
1.必须有一些已经存在的数据,拿来给机器学习。
2.机器学习之后必须给出自己的学习结果,也是是举一会反三。
机器拿到数据后可以有不同的学习方法,这些方法得到的结果不尽相同,可以自主选择。
以下是各方法:
-
决策树
顾名思义:一棵用来决策的树。
机器学习已有的数据,分析什么情况会导致什么结果,把它画成一颗分叉的树,
然后如果有新数据来了,带入这棵树来决策应该怎么做。
比如带入性别,得到结果:性别女则决策买买买,性别男则决策吃吃吃。 -
朴素贝叶斯
贝叶斯是个概率公式。
你观察数据发现,所有渣男阵营都是锡纸烫,但是好人阵营里有一小部分也是锡纸烫。
假设所有锡纸烫的人中渣男有80个人,好人有20个人。就得到锡纸烫的渣男概率了。
概率就是:检测新来的锡纸烫人,他有80%的概率是渣男。 -
梯度下降
顾名思义:一个按照梯度方向,下降最快方向,下降到底的方法。
你面前有一座山,就是初始数据,你每向山下走一步就是下降一次,问题是如何才能最快下山呢?当然是选择梯度(最陡峭的方向)方向向下走啦!
梯度的选择是自己设定的,下降距离最大的。可以尝试很多方向。
这是一个算法,每次需要计算的时候可以调用这个算法。 -
线性回归
顾名思义:线性拟合原来的数据,然后让你看其他数据时,带回(回归)到该拟合线上看。
怎么看一条线拟合的好不好?
看看每个点到这条线的距离和,也就是误差和。和越小越好,最好是找到最小值,这时候就可以用上面说的梯度下降方法找最值了。
我们在实践的过程中发现光看距离,有可能出现负数,这时候该如何解决?
我们选择把距离都取平方再求和,此时求得的最值依然是原来函数的最值,反正只要找出最小值就可以了,这种方法叫最小二乘法。
现在终于拟合好了这条线,随意给你一个值,你能大致判断它是在线上的位置就是回归了。 -
逻辑回归
顾名思义:已知原来的数据的逻辑,就是好与不好。拟合原来的数据,线性也好,非线性也好。随便怎么样,反正把好与不好分开来,然后随意丢给你你一个数据问你猜好不好就是逻辑回归。
逻辑就是分类。
回归就是随意给你一个数据,你去猜它的类。
怎么看分类的好不好呢?还是随便画一条线,我们统计一下分正确的点和分错误的点,但是个数这个东西不好弄呀,有可能个数一样但是分的差的很远,我们得想个办法来衡量一下。
办法就是:如果这个数据分正确了,就加上一个很小的的值,但是一个数据分错了就加上一个很大的值,可以把这个值想象成闪电的强度,我们力图找到一个最小的闪电强度。
对,转化成数值来衡量之后,我们就又可以用梯度下降法来找最小值了。
这个闪电叫误差惩罚,最后加起来得到的强度叫误差,越小越好。 -
支持向量机
英文是SVM,S是support 顾名思义:支持,其实翻译成支撑的意思更容易理解。
我们按照逻辑回归分类,突然发现分隔数据的时候有很多线都成立,但是谁分的更好一点呢?
总要有个衡量准则,就像逻辑回归线是通过误差值来衡量一样,我们选择支持向量机完成是另外一种方法,就是支撑点,一条线分的好不好就看离这条线最近点的距离是多少(这个距离一定是最小值,这个点就是支撑点),然后尝试第二条符合分隔的线,求出支撑点的距离,一比较,哎嘿,一个大一个小,肯定选距离大的那条线,因为他的支撑性比较好,容错率较高。
总结来说:
有不同的线对比,每条线都有支撑着的点,对比一下他们离分割线的距离,距离越大越好,因为分的开一点。这种方法叫支持向量机。 -
神经网络
上面接触的方法都是用一条线分隔,现如今出现的情况是,在已经分隔好的情况下,需要继续取一部分细分,取同时符合两种线的部分,如何操作?
其实也没什么难度,就直接用两条线分就行啦,为了形象的把这个过程描述出来,就类比到神经元这个概念。
数据传输过来,进入一个神经元(一条线)判断处理取符合条件的值(可以是0 1类型),再进入另一个神经元(另外那条线)取符合条件的值(可以是0 1类型),把这两个神经元(线)处理好的东西接在一起处理(与运算)判断是否都满足,是则输出,不是则丢弃。
这样画下来还真是神经网络的样子,所以这种方法叫神经网络。 -
核函数
kernel trick,发音核,之前学的方法我们都默认用直线划分,那是因为给的数据自己就分的很开,我们寻找到合适的直线就可以了,有这样的一种情况,所有的数据再一条直线上,怎么办呢?
很简单:
用曲线啊!
众所周知,曲线的函数表达式有两个字母,一个未知数,他们蕴含某种关系,完全可以把数据区分开!
但令人感兴趣的是,我们可以提高维度,比如赋予两个字母某种关系,把这个值放在第三个字母上,这样就是三个字母两个未知数的式子啦,这样也叫核函数!
我们依然可以把核函数理解为分类问题。
总结:有一个忍者,他看到数据,
啪一下直接分成两半了,那么它叫:逻辑回归忍者。
他小心翼翼的对比着边界数据切开,那么他叫:支持向量机忍者。
他交叉砍了好多刀,把数据分成了区域,那么他叫:神经网络忍者。
他对着排成一行的数据挠了挠头,拍桌而起,符合条件的数据因为小震到了上半空间,大的落在了下半空间,那么他叫:核函数忍者。
-
K均值聚类
顾名思义:聚类,就是把聚在一起的数据标记出来,聪明的人类一下就能看出来怎么分!
机器怎么学习呢?
随机散落几个值(a,b,c),分别求离a,b,c近的数据A,B,C,调整a,b,c到A,B,C中间(K均值的意思)。
迭代:重新标记离a,b,c近的数据集A,B,C,调整a,b,c到数据集A,B,C中间。
直到稳定。
重要的一点是:我们需要提前给定聚类的数量,比如例子中的a,b,c三个类。 -
层次聚类
如果不知道聚类数量怎么办?
从数据入手,如果两个数据之间距离小于我们设定的值,就合并进一个分组(层次的意思),一直迭代,直到算法结束。
这样我们就得到了一个根据距离长短分好的聚类了。