【阿旭機器學習實戰】系列文章主要介紹機器學習的各種算法模型及其實戰案例,歡迎點贊,關注共同學習交流。
本文介紹了特征降維的兩種方式
主成分分析(PCA)與線性判别分析算法(LDA)
。并且通過鸢尾花實際案例詳細介紹了
直接減少特征模組化
、
使用PCA模組化
以及使
用線性判别分析算法進行模組化
這3種模組化方式對預測準确率結果的影響。
目錄
-
- 1. 特征降維的主要目的
- 2. 常見特征降維的算法是主成分分析:PCA
- 3. PCA模組化與直接減少特征數模組化對比----鸢尾花資料集為例
-
- 3.1 直接減少特征數目模組化
- 3.2 不減少特征數目進行模組化
- 3.3 交叉驗證--直接比較是否減少特征數目模組化的準确率
- 3.3 用PCA算法進行資料降維--然後進行評估
- 4. 監督學習算法的特征降維----線性判别分析算法(LDA)
1. 特征降維的主要目的
1)在實際的項目中經常會遭遇到特征次元非常高的樣本(比如圖檔),往往無法借助于自己領域的知識來建構有效的特征
2)在資料表現方面,我們無法觀測超過三維的資料
2. 常見特征降維的算法是主成分分析:PCA
PCA算法核心:把高次元的向量向低次元投影
1)去平均值,即每一位特征減去各自的平均值
2)計算矩陣協方差和特征向量與特征值
3)把特征值從小到大排序
4)保留前K個特征值對應的特征向量
5)将資料投影到這K個特征所構成的一個新的向量空間中
3. PCA模組化與直接減少特征數模組化對比----鸢尾花資料集為例
3.1 直接減少特征數目模組化
from sklearn import datasets
data = iris.data
target = iris.target
data[:4]
array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2]])
from sklearn.neighbors import KNeighborsClassifier
# 直接取前連個特征,舍去後面的兩個特征然後進行模組化
# 這裡沒有分析哪些特征是主成分,必然會造成主成分丢失
train = data[:,:2]
train[:2]
array([[5.1, 3.5],
[4.9, 3. ]])
# 使用KNN算法進行模組化
knn = KNeighborsClassifier()
# 訓練模型
knn.fit(train,target)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=1, n_neighbors=5, p=2,
weights='uniform')
# 模型在訓練資料上的準确度
knn.score(train,target)
0.8333333333333334
3.2 不減少特征數目進行模組化
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=1, n_neighbors=5, p=2,
weights='uniform')
0.9666666666666667
3.3 交叉驗證–直接比較是否減少特征數目模組化的準确率
交叉驗證法不需要訓練,直接傳入模型和訓練資料就可以輸出每一次劃分的準确率
from sklearn.model_selection import cross_val_score
array([0.74509804, 0.74509804, 0.77083333])
array([0.98039216, 0.98039216, 1. ])
通過以上是否減少特征資料模組化後預測準确度我們發現,
不減少特征情況下模組化準确率達到97%以上
,而如果
直接取前兩個特征進行模組化,模型準确度隻有70%多
,準确率相差還是很大的,說明如果直接減少特征數目降維,會丢失很多有用的資訊,進而導緻準确率降低。
下面我們用主成分分析PCA的方法進行降維
,然後看其模型準确度如何
3.3 用PCA算法進行資料降維–然後進行評估
# 引入PCA算法
from sklearn.decomposition import PCA
# 建構2個特征
pca = PCA(n_components=2)
# 訓練階段通過主成分分析,找出主成分的特征空間
pca.fit(data)
PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)
# 轉化階段把資料由原來的空間投影到主成分空間
train_pca = pca.transform(data)
# 交叉驗證計算每次模組化的準确率
cross_val_score(knn,train_pca,target)
array([0.98039216, 0.94117647, 0.97916667])
我們可以看到,
通過PCA方法進行模組化後,模型準确率與不減少特征直接模組化的準确率差不多,效果還是非常好的
。
4. 監督學習算法的特征降維----線性判别分析算法(LDA)
通過主成分分析PCA降維以後可以大大的提高監督學習算法的性能。
主成分分析PCA降維屬于無監督學習的一種降維方法
,下面介紹一種
監督學習算法的降維方法--LDA算法
。由于監督學習算法需要考慮标簽,是以它的效率低于PCA。
# 導入LDA算法--線性判别分析算法(linear discriminant analysis,LDA)
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
#建立lda模型
lda = LinearDiscriminantAnalysis(n_components=2)
# 訓練算法并轉化資料,借用上述例子中的鸢尾花資料
train_lda = lda.fit_transform(data,target)
array([1. , 0.94117647, 1. ])
可以發現,這種LDA的降維方法也是很好的,準确率相比于原始資料模組化相差不多。
如果内容對你有幫助,感謝記得點贊+關注哦!
歡迎關注我的公衆号:
阿旭算法與機器學習
,共同學習交流。
更多幹貨内容持續更新中…