机器学习原理介绍

本文介绍了无监督机器学习中的几种关键算法,如线性回归(用于回归)、逻辑回归(分类工具)、k-means聚类(数据分簇)、K近邻(KNN)和SVM(支持向量机),以及自组织映射在数据降维和可视化中的应用。通过PCA实例展示了如何在Iris数据集上进行降维并可视化不同类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习小记

用无监督机器学习识别数据集的模式和结构。

linear regression

http://ufldl.stanford.edu/tutorial/supervised/LinearRegression/
类似于曲线拟合或最小二乘。

逻辑回归

注意区分于线性回归,用于分类而非回归。

k-means

将样本集划分为k个簇,簇内点紧密在一起,簇间的距离尽量大。最小化平方误差E
E = ∑ i = 1 k ∑ x ∈ C i ∥ x − μ i ∥ 2 2 E = \sum^k_{i=1}\sum_{x\in C_i}\|x-\mu_i\|^2_2 E=i=1kxCixμi22

μ i \mu_i μi是第i个簇的均值,即质心。
μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_i = \frac{1}{|C_i|}\sum_{x\in C_i}x μi=Ci1xCix

算法流程,

  1. 选择适合的k值
  2. 选择合适的k个质心;初始化k个簇为空集
  3. 求各个样本点与每个质心的距离,各点加入距离最短的那个质心所对应的簇
  4. 更新各个簇的质心
  5. 若达到最大迭代次数或质心不变,则输出结果;否则转到步骤3

如何选择初始的质心:随机选择一个点做质心,再从余下点中找与已选质心最近距离中较大的作为新质心。

减少计算距离的次数:两个簇的质心 j 1 j_1 j1 j 2 j_2 j2,若一点 x x x
2 D ( x , j 1 ) ≤ D ( j 1 , j 2 ) 2D(x,j_1)\leq D(j_1,j_2) 2D(x,j1)D(j1,j2)

D ( x , j 1 ) ≤ D ( x , j 2 ) D(x,j_1)\leq D(x,j_2) D(x,j1)D(x,j2)
另一方面,
D ( x , j 1 ) ≥ m a x { 0 , D ( x , j 2 ) − D ( j 1 , j 2 ) } D(x,j_1)\geq max\{0, D(x,j_2)-D(j_1,j_2)\} D(x,j1)max{0,D(x,j2)D(j1,j2)}

  • 结果评价
    同质性得分:簇内的数据点只属于一个类的程度,0-1,1表示完全属于一个类,我认为是分类结果是最好的。
    有效性测度:同质性得分和完整性得分的调和平均数。
    调整兰德指数:预测结果和真实标签的相关性。
    上述三指标都需要数据标注。
    轮廓系数:
    s = b − a m a x ( a , b ) s=\frac{b-a}{max(a,b)} s=max(a,b)ba

a:样本和簇内其他所有点的平均距离
b:样本和最近邻簇内所有数据点的平均距离

K Nearest Neighbor

给定查询点及正整数K,从数据集中找到距离查询点最近的K个数据。

SVM

有硬、软、核形式的SVM
a r g m i n ∣ ∣ w ∣ ∣ 2 , 任意 i 有 y i ( < w T , x i > + b ) > 1 argmin{||w||^2}, 任意 i 有y_i(<w^T,x_i> + b) \gt 1 argmin∣∣w2,任意iyi(<wT,xi>+b)>1
核方法,是把输入用带有参数的函数变换后求内积,转换为特征空间上的线性分类问题,即“点积被替换为核函数”。
常用k阶多项式核、高斯核特征空间。
∑ i = 1 m α i x T x ( i ) \sum_{i=1}^{m}\alpha_ix^Tx^{(i)} i=1mαixTx(i)

SOM(自组织映射)

自组织映射,是一类数据减维的方法,典型方法是主成分分析。
自组织映射作为减维和可视化方法,自有独到之处。

import matplotlib.pyplot as plt
from sklearn.dataset import load_iris
from sklearn.decomposition import PCA
from mpl_toolkits.mplot3d import Axes3D
iris = load_iris()
X = iris.data
labels = iris.target
fig = plt.figure(figsize=(4, 3))
plt.clf()
ax = Axes3D(fig, rect=[0, 0, 0.95, 1], elev=30, azim=130)
plt.cla()
b_pca = PCA(n_components=3)
b_pca.fit(X)
X = b_pca.transform(X)
for n, l in [("Setosa", 0), ("Versicolour", 1), ("Virginica", 2)]:
    #discrete label by labels == i
    ax.scatter(X[labels == l, 0], X[labels == l, 1], X[labels == l, 2], alpha=0.5, label=n)
plt.legend()
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值