《Python机器学习基础教程 》笔记-第3章

Github链接:《第3章》

无监督学习的类型与预处理

训练算法时只有输入数据,没有已知输出。

无监督学习类型

无监督变换

数据集的无监督变换,变换后的特征可能更容易被算法理解。

也常用于把高维特征的数据降维为较少特征的数据,带来一个好处就是降维后就能够可视化分析。

聚类算法

该类算法能够把输入数据划分成不同的组,每组包含类似的物项。

无监督学习的挑战

因为训练数据没有分类标签,所以很难用精度去评估模型有效。

因此,无监督算法通常用于探索数据的规律,而不是自动化系统。

无监督算法的另外一个用途是作为监督算法的预处理步骤,之前提到过可以进行特征变换,有时可以提高监督算法的精度、或者减少内存以及计算开销。

预处理与缩放

之前用过的SVM、神经网络对特征缩放非常敏感,需要对原始数据进行预处理。

即经过MinMaxScaler处理后,所有特征的值都缩放到0~1之间。

变换后的数据形状(特征之间的比例)与原始数据相同,特征只是发生了移动与缩放。

对测试集进行相同的缩放,也就是用训练集fit好的scaler在测试集执行,不必担心测试集的特征值范围和训练集不同导致什么问题,保持一致的缩放比例才是正确的。

先在原始数据上训练SVC模型,看一下精度:

测试集精度只有0.62。

再试试缩放后的特征作为输入。

精度高达0.97。

也可以尝试其他的预处理缩放算法替换MinMaxScaler,比如:StandardScaler。

精度也很棒。

降维、特征提取与流行学习

主成分分析

PCA可以从已有特征产生出新特征,新特征对解释数据更好用。

PCA可以指定提取的特征个数,实现降维的目的。

可视化用途

下面对cancer数据集利用PCA从30个维降到2个维度

因为PCA后只有2个特征维度,所以可以绘图做可视化分析。

主成分提取用途

图像分类场景,因为色值的范围是0~255,为了应用模型我们手动对特征/255缩放到0~1之间,看一下模型效果:

精度不高。

KNN主要是依据点之间的距离进行计算的,而2张人脸图片对应某个位置像素之间求距离是没有什么明显意义的。

此时我们可以考虑利用PCA提取主成分,作为100个新特征输入到模型。

PCA通过,带来了精度提升。

非负矩阵分解

NFM和PCA类似,用于提取有用特征、也用于降维,但是要求所有特征非负。

具体例子如下,但效果并没有更好:

PCA通常是数据变换的首选方法。

t-SNE流行学习

用于将高维数据降到2维,新特征能够根据原始数据中数据点之间的远近程度将不同类比明确分开。

在可视化用途比PCA更有效,但只能用于做可视化,无法像PCA一样应用到测试集上。

举个栗子即可。

聚类

聚类(clustering)是将数据集划分成组的任务,这些组叫做簇。

聚类算法给每个数据点分配一个数字,表示数据点属于哪个簇。

k均值聚类

算法通过不断迭代找到几个簇中心,并将每个数据点分配给最近的簇中心。

簇标签没有先验意义,我们并不知道每一个簇代表什么,只能人为观察。

kmeans类似于PCA可以进行特征变换,首先kmeans进行fit找到所有簇中心后,进而对训练集/测试集特征进行transform,从而将原始数据点变换为到各个簇中心的距离,作为新的特征。

Kmeans最初的簇中心是随机产生的,算法输出依赖于随机种子,sklearn会默认跑10次选最好的1次。另外,kmeans对簇形状有假设,人工确定簇个数是很难琢磨的。

凝聚聚类

算法首先声明每个点是自己的簇,然后不断合并相似的簇,直到簇数量达到目标。

度量应该合并哪2个簇有3种算法:

  • ward
  • average
  • complete

ward适合大多数数据集,它适合每个簇数据点个数相当的情况,否则其他2个效果更好。

因为算法是不断合并簇的逻辑,所以它对新数据无法做出所属簇的预测。

DBSCAN聚类

DBSCAN 的主要优点是它不需要用户先验地设置簇的个数,可以划分具有复杂形状的簇,还可以找出不属于任何簇的点,DBSCAN 也不允许对新的测试数据进行预测。

聚类算法的对比与评估

这一段太晦涩了,不看了。

小结

无监督学习可以用于探索性的数据分析与预处理。

预处理以及分解方法在数据准备中具有重要作用。

通常来说,很难量化无监督算法的有用性,但这不应该妨碍你使用它们来深入理解数据。学完这些方法,你就已经掌握了机器学习从业者每天使用的所有必要的学习算法。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~