无监督学习
监督学习,就是我们有确定的分类,传入参数为{x,y}这样的,输入x会输出确定的y。
无监督学习,就是我们没有确定的分类,传入参数为{x,x,…,x}这样的,算法根据某些特征自动将其分类。
K-means算法
对于无监督学习的分类算法,最简单的是k-means算法了。该算法非常容易理解:
k的含义为分成k个群。
例如,我们要分成2个群。
- Step1:随机在样本中确定两个点A,B。
- Step2:将样本中所有的点,根据到这两个点之间的距离,分成两部分。
- Step3:求每一部分的中心位置。
- Step4:将中心位置重新赋值给点A和点B。重复Step2,3,4.
- Step5:不再更新,完成分类。
这个算法非常简单,实现起来也很容易,其代价函数也很容易得到,即每个群到其中心点的距离。
J
(
c
(
1
)
,
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
k
)
=
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
−
μ
c
(
i
)
∣
∣
2
其
中
:
c
(
i
)
表
示
第
i
个
样
本
x
(
i
)
所
分
配
的
索
引
。
μ
k
表
示
该
群
的
中
心
。
μ
c
(
i
)
表
示
样
本
x
(
i
)
所
对
应
的
群
的
中
心
点
。
\begin{aligned} & J(c^{(1)},...,c^{(m)},\mu_1,...,\mu_k)=\frac{1}{m}\sum_{i=1}^{m}||x^{(i)}-\mu_{c^{(i)}}||^2\\ & 其中:\\ & c^{(i)}表示第i个样本x^{(i)}所分配的索引。\\ & \mu_k表示该群的中心。\\ & \mu_{c^{(i)}}表示样本x^{(i)}所对应的群的中心点。 \end{aligned}
J(c(1),...,c(m),μ1,...,μk)=m1i=1∑m∣∣x(i)−μc(i)∣∣2其中:c(i)表示第i个样本x(i)所分配的索引。μk表示该群的中心。μc(i)表示样本x(i)所对应的群的中心点。
算法实现较简单,双重循环遍历即可。
存在缺点
但是这个算法仍存在一个不小的缺点,就是我们无法保证它分割的情况是比较合适的。
可能会出现某些极端情况。
我们就需要多次随机训练了。找到里面比较合适的一种情况。
至于k的选择,一般也是凭经验选择XD(或者凭运用场景)。
多次随机重复实验之后,我们比较其代价函数即可选出比较合适的点。
参考资料
B站吴恩达机器学习相关课程:https://www.bilibili.com/video/BV164411b7dx