读书笔记|图解机器学习算法

图解机器学习算法

作者:秋庭伸也

Python:3.7

scikit-learn:0.20.3

机器学习

  • 有监督学习
    • 分类(二元分类、多元分类):逻辑回归, 支持向量机 ,支持向量机(核方法),朴素贝叶斯,随机森林,神经网络,KNN
    • 回归:线性回归,正则化,支持向量机,支持向量机(核方法),随机森林,神经网络,KNN
  • 无监督学习
    • 降维:PCA、LSA、NMF、LDA、LLE、t-SNE
    • 聚类:k-means、混合高斯模型
  • 强化学习

基础

图型绘制

散点图:scatter

直方图:hist

柱状图:bar

折线图:plot

箱型图:boxplot

pandas

相关系数:corr

统计信息:describe

散点图矩阵:scatter_matrix

有监督学习

线性回归

一元回归:y = w0+w1*x1

多元回归:y = w0+w1*x1+w2*x2

多项式回归:y = w0+w1*x1+w2*x^2^1

正则化

超参数α

岭回归Ridge

Lasso回归

逻辑回归

二分类sigmoid

多分类softmax

np.r_

np.random.normal

model.predict_proba

支持向量机

间隔最大化

线性支持向量机:处理二分类

软间隔,超参数

支持向量:间隔内侧、间隔上 数据

网格搜索,随即搜索

make_blobs

支持向量机(核方法)SVC

高维空间使用支持向量机学习决策边界 ,然后投影到原始特征形成的向量空间上,得到决策边界

通过核函数,核方法可以使用在高维空间中学习到的决策边界,无需构建具体的线性分离的高维空间。

不宜直接使用非线性核函数,应先使用线性核函数进行分析,以了解数据。

朴素贝叶斯

常用于自然语言分类问题

BoW(Bag of Words)词袋

计算两种概率:

1.每个标签出现的概率

2.在各标签下,每个单词出现的条件概率

平滑:在没有出现单词的位置也分配小的概率值

随机森林

决策树

不纯度,基尼指数,加权平均基尼指数

1.计算某个区域的所有特征值和候选分割的不纯度

2.以分割时不纯度减少最多的分割方式分割区域

3.对于分割后的区域重复1,2步骤

随机森林

Bootstrap方法以及随机选取特征值方法

特征重要度

对随机森林的所有决策树求在以某个特征分割时的不纯度并取平均值

神经网络

输入层,中间层,输出层

简单感知机
Early Stopping

早停法 防止过拟合

KNN(K近邻)

1.计算输入数据与训练数据之间的距离。

2.得到距离输入数据最近的k个训练数据。

3.对训练数据的标签进行多数表决,将结果作为分类结果。

数据量小,维度小 适合

无监督学习

PCA主成分分析

具有相关性的数据

PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。

其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。

思考:我们如何得到这些包含最大差异性的主成分方向呢?

答案:事实上,通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。

由于得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。

降维是指在保留数据特征的前提下,以少量的变量表示有许多变量的数据,有助于降低多变量数据分析的复杂度。

用低维变量表示高维空间的数据,低维的轴叫做主成分。

方向

由构成新变量时对象数据变量的权重决定

重要度

与变量偏差有关

主成分得分

第一主成分,第二主成分

1.计算协方差矩阵

2对协方差矩阵求解特征值问题,求出特征向量和特征值

3.以数据表示各主成分方向。

特征值,特征向量

LSA潜在语义分析(LSI)

从大量文本数据中找出单词之间的潜在关联性

潜在语义空间

矩阵分解

主要的问题有:
    1) SVD计算非常的耗时,尤其是我们的文本处理,词和文本数都是非常大的,对于这样的高维度矩阵做奇异值分解是非常难的。
    2) 主题值的选取对结果的影响非常大,很难选择合适的k值。
    3) LSI得到的不是一个概率模型,缺乏统计基础,结果难以直观的解释。

NMF非负矩阵分解

输入数据和输出数据的值都是非负的

没有“潜在语义空间的每一个维度都是正交的”这一约束条件

优点:可解释性强

V (n×d)= W(n×r)*H(r×d)

将W和H初始化为正值

将H视为常数,更新W

将W视为常数,更新H

当W和H收敛时,停止运算

LDA隐含狄利克雷分布

词袋模型

文本的主题分布

主题的单词分布

1.基于文本的主题分布为单词分配主题

2.基于分配的主题的单词分布确定单词

3.对所有文本中包含的单词执行步骤1和步骤2的操作。

LDA算法步骤

1.为各文本的单词随机分配主题

2.基于为单词分配的主题,计算每个文本的主题概率

3.基于为单词分配的主题,计算每个主题的单词概率

4.计算步骤2和步骤3中的概率的乘积,基于得到的概率,再次为各文本的单词分配主题。

5.重复步骤2~步骤4的计算,直到收敛。

K-means算法

1.从数据点随机选择数量与簇的数量相同的数据点,作为这些簇的重心。

2.计算数据点与各个重心之间的距离,并将最近的重心所在的簇作为该数据点所属的簇。

3.计算每个簇的数据点的平均值,作为新的重心。

4.重复2,3,继续计算,直到所有数据点不改变所属的簇,或者达到最大计算步数。

Elbow方法

确定合适的簇的数量

簇内平方和WCSS

判断聚类结果的好坏

随着簇的数量增加,WCSS会变小

指对所有簇计算其所属的数据点与簇的重心之间距离的平方和,并将它们相加得到的值。值越小,说明聚类结果越好。

混合高斯分布

高斯分布

高斯分布(Gaussian distribution)有时也被称为正态分布(normal distribution),是一种在自然界大量的存在的、最为常见的分布形式。

1.初始化参数(各高斯分布的均值和方差)

2.对每个类别计算数据点的权重。

3.根据步骤2中计算出的权重重新计算参数。

4.重复2,3直到通过3更新前后的每个均值的变化足够小。

高斯分布:椭圆形分布数据

K-means:圆形分布数据

LLE局部线性嵌入

流形学习

流形:可以将局部看作没有弯曲的空间。

在D维空间存在一个d维空间结构(d<D)

1.找到数据点xi的近邻点(k个)。

2.求出能用k个近邻点的线性组合表示xi的权重wij

3.使用权重wij计算低维(d维)的yi

t-SNE t分布随机邻域嵌入

将高维复杂数据降维为二维(或三维)算法,用于低维空间的可视化

在降维时使用自由度为1的t分布

原本很近的结构在低维空间更近,原本较远的结构变得更远。

1.对于所有的组i、j,使用高斯分布来表示xi和xj的相似度。

2.在低维空间中随机配置与xi相同数量的点yi,对于所有的组i、j,使用t分布表示yi和yj的相似度。

3.更新数据点yi,使得步骤1和步骤2中定义的相似度分布尽可能的相似。

4.重复步骤3,直到达到收敛条件。

评估方法和各种数据处理

分类问题:混淆矩阵、正确率、精确率、召回率、F值、AUC

回归问题:均方误差、决定系数

分类问题评估方法

准确率:预测正确的结果占总预测结果的比例。accuracy_score(y,y_pred)

精确率:在所有被预测为阳性的数据中,被正确预测为阳性的数据所占的比例。precision_score(y,y_pred)

召回率:在实际为阳性的数据中,被正确预测为阳性的数据所占的比例。recall_score(y,y_pred)

F值:综合反映精确率,召回率两个趋势的指标。f1_score(y,y_pred)。精确率,召回率此消彼长,如果这俩个指标同等重要,可以观察F值。

预测概率:predict_proba,输出每个数据被分类为各标签的概率

(model_lor.predict_proba(X)[: , 1]>0.1).astype(np.int)

应对数据不均衡问题指标:AUC,AUC指的是ROC曲线下的面积。roc_auc_score(y,probas[:, 1])

回归问题评估方法

1
2
3
4
5
6
7
8
from sklearn.datasets import load_boston

data = load_boston()
#X x1取到的都是 二维数组
X = data.data[:, [5, ]]
x1 = data.data[:, [5]]
#x2 取到的 是 一维数组
x2 = data.data[:, 5]

均方误差MSE,mean_squared_error(y,y_pred) 计算所有预测值与数据之间的误差的平方,并取平方的平均值

决定系数R^2^:越接近1说明预测越好 r2_score(y,y_pred)

防止过拟合

增加训练数据,减少特征值,正则化,Early Stopping ,集成学习

将数据分为训练数据和验证数据,train_test_split(X,y,test_size =0.3)

交叉验证
1
2
3
cv = KFold(5,shuffle = true)
model_rfc_1 = RandomForestClassifier()
cross_val_score(model_rfc_1,X,y,cv=cv,scoring='accuracy')
搜索超参数

网格搜索:一种自动搜索超参数方法

GridSearchCV(model,param_grid,cv=cv,scoring=’accuracy’)

文本数据处理

1.基于单词出现次数的转换

2.基于tf-idf的转换

tf词频,idf逆文本频率指数,tf是单词在文本中出现的频率,idf是一个包含该单词的文本越多,值就越小的值。

图像数据处理

1.直接将像素信息作为数值使用