欢迎来我的博客 http://www.blackblog.tech,我的简书 https://www.jianshu.com/u/55a1bc4688c6
这一篇虽然叫做:十分钟上手sklearn:特征提取,常用模型,但是写着写着我就想把每一个模型都详细说一下,所以也可以看作是机器学习算法概述了。
上一篇我们讲解了如何安装sklearn,导入自带数据集,创建数据,对数据进行预处理,通过上一篇的讲解,相信大家能够感受到sklearn的强大之处。
这一篇,我们将对sklearn中有关特征提取,常用模型进行讲解。
主要内容包括:
1.PCA算法
2.LDA算法
3.线性回归
4.逻辑回归
5.朴素贝叶斯
6.决策树
7.SVM
8.神经网络
9.KNN算法
是不是感觉干货满满啊!Let’s get moving!!!
特征提取
我们获取的数据中很多数据往往有很多维度,但并不是所有的维度都是有用的,有意义的,所以我们要将对结果影响较小的维度舍去,保留对结果影响较大的维度。
PCA(主成分分析)与LDA(线性评价分析)是特征提取的两种经典算法。PCA与LDA本质上都是学习一个投影矩阵,使样本在新的坐标系上的表示具有相应的特性,样本在新坐标系的坐标相当于新的特征,保留下的新特征应当是对结果有较大影响的特征。
PCA(主成分分析)
最大方差理论:信号具有较大的方差,噪声具有较小的方差
PCA的目标:新坐标系上数据的方差越大越好
PCA是无监督的学习方法
PCA实现起来并不复杂(过几天写一篇使用NumPy实现的PCA),但是在sklearn就更为简单了,直接食用skleran.decomposition即可
import sklearn.decomposition as sk_decomposition
pca = sk_decomposition.PCA(n_components='mle',whiten=False,svd_solver='auto')
pca.fit(iris_X)
reduced_X = pca.transform(iris_X) #reduced_X为降维后的数据
print('PCA:')
print ('降维后的各主成分的方差值占总方差值的比例',pca.explained_variance_ratio_)
print ('降维后的各主成分的方差值',pca.explained_variance_)
print ('降维后的特征数',pca.n_components_)
参数说明:
n_components:指定希望PCA降维后的特征维度数目(>1), 指定主成分的方差和所占的最小比例阈值(0-1),’mle’用MLE算法根据特征的方差分布情况自己去选择一定数量的主成分特征来降维
whiten: 判断是否进行白化。白化:降维后的数据的每个特征进行归一化,让方差都为1
svd_solver:奇异值分解SVD的方法{‘auto’, ‘full’, ‘arpack’, ‘randomized’}
打印结果:
下面打印的内容只是帮助大家理解pca的参数,就不打印降维后的数据了,打印出来并没有什么意义。
PCA:
降维后的各主成分的方差值占总方差值的比例 [ 0.92461621 0.05301557 0.01718514]
降维后的各主成分的方差值 [ 4.22484077 0.24224357 0.07852391]
降维后的特征数 3
LDA(线性评价分析)
LDA基于费舍尔准则,即同一类样本尽可能聚合在一起,不同类样本应该尽量扩散;或者说,同雷洋被具有较好的聚合度,类别间具有较好的扩散度。
既然涉及到了类别,那么LDA肯定是一个有监督算法,其实LDA既可以做特征提取液可以做分类。
LDA具体的实现流程这里就不再赘述了,直接看skleran如何实现LDA。
import sklearn.discriminant_analysis as sk_discriminant_analysis
lda = sk_discriminant_analysis.LinearDiscriminantAnalysis(n_components=2)
lda.fit(iris_X,iris_y)
reduced_X = lda.transform(iris_X) #reduced_X为降维后的数据
print('LDA:')
print ('LDA的数据中心点:',lda.means_) #中心点
print ('LDA做分类时的正确率:',lda.score(X_test, y_test)) #score是指分类的正确率
print ('LDA降维后特征空间的类中心:',lda.scalings_) #降维后特征空间的类中心
参数说明:
n_components:指定希望PCA降维后的特征维度数目(>1)
svd_solver:奇异值分解SVD的方法{‘auto’, ‘full’, ‘arpack’, ‘randomized’}
打印结果:
下面打印的内容只是帮助大家理解lda的参数,就不打印降维后的数据了,打印出来并没有什么意义。
LDA:
LDA的数据中心点:
[[ 5.006 3.418 1.464 0.244]
[ 5.936 2.77 4.26 1.326]
[ 6.588 2.974 5.552 2.026]]
LDA做分类时的正确率: 0.980952380952
LDA降维后特征空间的类中心:
[[-0.81926852 0.03285975]
[-1.5478732 2.15471106]
[ 2.18494056 -0.93024679]
[ 2.85385002 2.8060046 ]]
常用模型
好了,好了,终于可以开始讲模型了,其实这才是我想讲的重点啊,没想到前面的内容都讲了这么多。。。
机器学习常用的算法也就那几个,sklearn中对其都做了实现,我们只需要调用即可。下面每一个算法的原理我就不细讲了,只讲怎么用,以后会写这些算法的具体原理与实现方式。
干货要来了,准备好!
首先sklearn中所有的模型都有四个固定且常用的方法,其实在PCA与LDA中我们已经用到了这些方法中的fit方法。
# 拟合模型
model.fit(X_train, y_train)