理論階段
數據降維
- 特徵選擇
-
特徵選擇是什麼
特徵選擇就是單純地從提取到的所有特徵中選擇部分特徵作爲訓練集特徵,特徵在選擇前和選擇後可以改變值、也可以不改變值,但是選擇後地特徵維數肯定比選擇前小,畢竟我們只選擇了其中地一部分特徵。 -
sklearn特徵選擇API
主要方法(三大武器):- Filter(過濾式):VarianceThreshold
- Embedded(嵌入式):正則化、決策樹
- Wrapper(包裹式)
-
其他特徵選擇方法
-
特徵選擇的原因
- 冗餘:部分特徵的相關度高,容易消耗計算機性能
- 噪聲:部分特徵對預測結果有影響
-
- 主成分分析
- sklearn.decomposition
- PCA 是什麼
- 本質:PCA是一種分析、簡化數據集地技術
- 目的:是數據位數壓縮,儘可能降低原數據的維數(複雜度),損失少量信息。
- 作用:可以消減迴歸分析或者聚類分析中特徵的數量
代碼階段
需要的模塊
我們本次機器學習的課程使用的python程序庫:
sklearn
模塊安裝
在鍵盤上按win+R,輸入cmd,確定後,輸入 pip install sklearn
VarianceThreshold()類
簡介
feature_selection 意思是特徵選擇
Variance 意思是方差
Threshold 意思是閾值
VarianceThreshold(threshold=0.0) 刪除所有低方差特徵
Variance.fit_transform(X)
X:numpu array 格式地數據[n_samples, n_features]
返回值:訓練集差異低於threshold地特徵將被刪除。
默認值是保留所有非零方差特徵,即刪除所有樣本中具有相同值地特徵
代碼
from sklearn.feature_selection import VarianceThreshold
def var():
"""
特徵選擇-刪除低方差地特徵
:return: None
"""
# VarianceThreshold(threshold=0.0) 刪除所有低方差特徵
# Variance.fit_transform(X)
# X:numpu array 格式地數據[n_samples, n_features]
# 返回值:訓練集差異低於threshold地特徵將被刪除。
# 默認值是保留所有非零方差特徵,即刪除所有樣本中具有相同值地特徵
var = VarianceThreshold(threshold=0.0)
data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
source = var.inverse_transform(data)
print(source)
# var.inverse_transform(data)得到數據可知,在VarianceThreshold中數據不可逆
"""
原始數據:
[[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]]
source 得到的數據:
[[0 2 0 0]
[0 1 4 0]
[0 1 1 0]]
data 數據:
[[2 0]
[1 4]
[1 1]]
Threshold = 0.0 即去除掉方差爲0地特徵
"""
print(data)
return None
if __name__ == '__main__':
var()
PCA()類
簡介
- PCA 是什麼
- 本質:PCA是一種分析、簡化數據集地技術
- 目的:是數據位數壓縮,儘可能降低原數據的維數(複雜度),損失少量信息。
- 作用:可以消減迴歸分析或者聚類分析中特徵的數量
代碼
from sklearn.decomposition import PCA
def pca():
"""
主成分分析進行特徵降維
:return: None
"""
# PCA(n_components=0.9) 將愛護據分解爲較低維數空間
# PCA.fit_transform(X)
# X:numpy array格式的數據[n_samples, n_features]
# 返回值:轉換後指定維數的array
pca = PCA(n_components=0.9)
data = pca.fit_transform([[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]])
source = pca.inverse_transform(data)
print(source)
print(data)
"""
原始數據:
[[2, 8, 4, 5],
[6, 3, 0, 8],
[5, 4, 9, 1]]
source 數據:
[[ 2.0000000e+00 8.0000000e+00 4.0000000e+00 5.0000000e+00]
[ 6.0000000e+00 3.0000000e+00 -8.8817842e-16 8.0000000e+00]
[ 5.0000000e+00 4.0000000e+00 9.0000000e+00 1.0000000e+00]]
data 數據:
[[ 1.22879107e-15 3.82970843e+00]
[ 5.74456265e+00 -1.91485422e+00]
[-5.74456265e+00 -1.91485422e+00]]
"""
return None
if __name__ == '__main__':
pca()