机器学习好伙伴之scikit-learn的使用——特征提取
有些时候特征太多了,可以利用sklearn中自带的函数进行特征提取噢
什么是特征提取
在进行机器学习的实验里,但并不是所有的维度都是有用的,如果能将对实验结果影响较大的有用维度提取出来,去除掉无用维度,那么既可以提高预测的精度、也可以加快模型的预测时间。
PCA(主成分分析)与LDA(线性评价分析)是特征提取的两种经典算法。
本质上两个特征提取方法都是学习一个投影矩阵,从而使样本在新的坐标系上的表示具有相应的特性。
sklearn中特征提取的实现
PCA(主成分分析)
该方法通过调用如下函数实现。
import sklearn.decomposition as sk_decomposition
sk_decomposition.PCA()
其主要使用的参数为:
1、n_components:当输入大于1时,代表降维后的特征量;当输入大于0小于1时,代表主成分的方差和所占的最小阈值;’mle’代表使用MLE算法根据特征的方差分布情况去选择主成分特征进行降维。
2、whiten: 判断是否需要将降维后的数据的每个特征进行归一化,让方差都为1。
3、svd_solver:奇异值分解SVD的方法,输入为以下四个之一{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。
应用方式如下:
pca = sk_decomposition.PCA(n_components=2,whiten=False,svd_solver='auto')
pca.fit(data_X)
LDA(线性评价分析)
该方法通过调用如下函数实现。
import sklearn.discriminant_analysis as sk_discriminant_analysis
sk_discriminant_analysis.LinearDiscriminantAnalysis()
其主要使用的参数为:
1、n_components:代表降维后的特征量。
2、svd_solver:奇异值分解SVD的方法,输入为以下四个之一{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。
应用方式如下:
lda = sk_discriminant_analysis.LinearDiscriminantAnalysis(n_components=2)
应用示例
PCA部分
import sklearn.decomposition as sk_decomposition
from sklearn import datasets
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_Y = loaded_data.target
pca = sk_decomposition.PCA(n_components=2,whiten=False,svd_solver='auto')
pca.fit(data_X)
#PCA_X为降维后的数据
PCA_X = pca.transform(data_X)
print ('各个主成分方差比例',pca.explained_variance_ratio_)
print ('各个主成分方差值',pca.explained_variance_)
print ('降维后的特征数量',pca.n_components_)
实验结果为:
各个主成分方差比例 [0.80582318 0.16305197]
各个主成分方差值 [30889.91126082 6250.3300614 ]
降维后的特征数量 2
LDA部分
import sklearn.discriminant_analysis as sk_discriminant_analysis
from sklearn.model_selection import train_test_split
from sklearn import datasets
loaded_data = datasets.load_iris()
data_X = loaded_data.data
data_Y = loaded_data.target
X_train, X_test, y_train, y_test = train_test_split(data_X, data_Y, test_size=0.3)
# 生成lda降维的结构
lda = sk_discriminant_analysis.LinearDiscriminantAnalysis(n_components=2)
lda.fit(data_X,data_Y)
#lda_X为降维后的数据
lda_X = lda.transform(data_X)
#中心点
print ('LDA的中心点:',lda.means_)
#score是指分类的正确率
print ('LDA后,预测的正确率:',lda.score(X_test, y_test))
#降维后特征空间的类中心
print ('LDA后,特征空间的类中心:',lda.scalings_)
实验结果为:
LDA的中心点: [[5.006 3.428 1.462 0.246]
[5.936 2.77 4.26 1.326]
[6.588 2.974 5.552 2.026]]
LDA后,预测的正确率: 0.9777777777777777
LDA后,特征空间的类中心: [[ 0.82937764 0.02410215]
[ 1.53447307 2.16452123]
[-2.20121166 -0.93192121]
[-2.81046031 2.83918785]]