Machine learning notes (五)


前言

一、聚类算法

聚类指自动将相似对象归为一组,一般应用在客户细分,分组实验成果。常用的聚类算法有K-means、谱聚类、mean-shift。
Machine learning notes (五)

1.1 K-means

● 中心思想

       事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心)。重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。

● 算法流程

  1. 选择聚类的个数k(kmeans算法传递超参数的时候,只需设置最大的K值。
  2. 任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心。
  3. 对每个点确定其聚类中心点。
  4. 再计算其聚类新中心。
  5. 重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变。)

● 常用距离

(1)欧式距离
(2)曼哈顿距离

● 应用
(1)去除孤立点,离群点,只针对度量算法,解决方法(常用归一化预处理方法 )
(2)b.离散化

1.2 分类和聚类的区别

Machine learning notes (五)

二、降维

降维一般指减少要考虑的随机变量的数量。优点是可视化、提高效率。降维算法有PCA、SVD.
Machine learning notes (五)

三:模型选型

● 模型选型:比较、验证、选择参数和模型。
● 应用:通过参数调整改进精度。
● 模型选型算法一般有网格搜索、交叉验证、指标。

四:数据预处理

       数据预处理可以进行特征提取和归一化等一些操作。常用在转换输入数据,例如文本,以供机器学习算法使用。

4.1 数据预处理的流程

  1. 首先要明确有多少特征,哪些是连续的,哪些是类别的。
  2. 检查有没有缺失值,对缺失的特征选择恰当方式进行弥补,使数据完整。
  3. 对连续的数值型特征进行标准化,使得均值为0,方差为1.
  4. 对类别型的特征进行one-hot编码。
  5. 将需要转换成类别型数据的连续型数据进行二值化。
  6. 为防止过拟合或者其他原因,选择是否要将数据进行正则化。
  7. 在对数据进行初探之后发现效果不佳,可以尝试使用多项式方法,寻找非线性的关系。
  8. 根据实际问题分析是否需要对特征进行相应的函数转换。

4.2 数据标准化(归一化)

● 概述:将特征数据的分布调整成标准正太分布,也叫高斯分布,也就是使得数据的均值为0,方差为1。

● 数据标准化的原因:举一个简单的例子,在KNN中,我们需要计算待分类点与所有实例点的距离。假设每个实例点(instance)由n个features构成。如果我们选用的距离度量为欧式距离,如果数据预先没有经过归一化,那么那些绝对值大的features在欧式距离计算的时候起了决定性作用。

● 数据标准化的优点:可以提升模型的收敛速度。对于线性model来说,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。
Machine learning notes (五)
Machine learning notes (五)
       比较这两个图,前者是没有经过归一化的,在梯度下降的过程中,走的路径更加的曲折,而第二个图明显路径更加平缓,收敛速度更快。
       对于神经网络模型,避免饱和是一个需要考虑的因素,通常参数的选择决定于input数据的大小范围。

● 数据标准化的过程:去均值的中心化(均值变为0);方差的规模化(方差变为1)

4.3 数据标准化常用函数方法

(1)StandardScaler
       标准化数据通过减去均值然后除以方差(或标准差),这种数据标准化方法经过处理后数据符合标准正态分布,即均值为0,标准差为1,转化函数为:x = (x-μ) / σ
       适用于:如果数据的分布本身就服从正态分布,就可以用这个方法.

(2)MinMaxScaler
       将特征缩放至特定区间,将特征缩放到给定的最小值和最大值之间,或者也可以将每个特征的最大绝对值转换至单位大小。这种方法是对原始数据的线性变换,将数据归一到[0,1]中间。转换函数为: x = (x-min)/(max-min)。
       这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。而且这种方法对于outlier非常敏感,因为outlier影响了max或min值,所以这种方法只适用于数据在一个范围内分布的情况

(3)RobustScaler
       如果你的数据包含许多异常值,使用均值和方差缩放可能并不是一个很好的选择。这种情况下,你可以使用 robust_scale 以及 RobustScaler 作为替代品。它们对你的数据的中心和范围使用更有鲁棒性的估计。

(4)Normalization
       正则化是将样本在向量空间模型上的一个转换,经常被使用在分类与聚类中。函数normalize 提供了一个快速又简单的方式在一个单向量上来实现这正则化的功能。正则化有L1, L2等。

(5)二值化
       特征的二值化是指将数值型的特征数据转换成布尔类型的值。

4.4 one-hot独热编码

● One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候只有一位有效。
● One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。

● 举例:

  1. 按照N位状态寄存器来对N个状态进行编码的原理,咱们处理后应该是这样的(这里只有两个特征,所以N=2):
    男 => 10
    女 => 01

  2. 祖国特征:[“中国”,"美国,“法国”] (这里N=3)
    中国 => 100
    美国 => 010
    法国 => 001

● 问题:

  1. 为什么使用one-hot编码来处理离散型特征?
           在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。
           而我们使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码,确实会让特征之间的距离计算更加合理。
           比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,其表示分别是x_1 = (1), x_2 = (2), x_3 = (3)。两个工作之间的距离是,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。那么x_1和x_3工作之间就越不相似吗?显然这样的表示,计算出来的特征的距离是不合理。那如果使用one-hot编码,则得到x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1),那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的,显得更合理。

● 不需要使用one-hot编码来处理的情况

  1. 将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。比如,该离散特征共有1000个取值,我们分成两组,分别是400和600,两个小组之间的距离有合适的定义,组内的距离也有合适的定义,那就没必要用one-hot 编码。离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。

● 数据标准化的优点:

  1. 速度比较快,各个类之间是相等的。

● 数据标准化的缺点:

  1. 当数据量比较大的时候,生成的矩阵就会巨大。就会导致无法计算。