机器学习(5)降维 -- 特征选择(低方差过滤与相关系数)与主成分分析(PCA降维)
目錄
一、基礎理論
1、降維定義
2、降維對象及目標
二、低方差過濾
1、基礎理論?
2、API
過程:
1、讀取待處理數據集
2、創建低方差過濾轉換器(設置過濾閾值)
3、低方差過濾處理
代碼
三、相關系數
1、基礎理論
2、API
計算相關系數
四、主成分分析(PCA降維)
1、基礎理論
1、定義
2、作用
3、過程
2、API
過程:
1、獲取數據
2、實例化降維轉換器類
3、降維處理?
代碼
總代碼
一、基礎理論
1、降維定義
降維是指在特定條件下,降低隨機變量(特征)個數,得到一組“不相關”變量的過程。(不僅僅是降低緯度)
(顯示中拍照,就是三維降至二維)?
零維:標量
一維:向量
二維:矩陣
三維:多個二維數組嵌套
......
?相關特征:例如相對濕度與降水量。
2、降維對象及目標
降維對象:二維數組。
降維目標:得到不相關特征變量。(太多相關特征會造成特征冗余(即特征過多))
二、低方差過濾
1、基礎理論?
低方差過濾,過濾掉不太重要的特征。
特征方差小:大多數樣品該特征差距不大。
特征方差大:很多樣品該特征差距較大。(區分度高)
2、API
sklearn.feature_selection.VarianceThreshold
過程:
1、讀取待處理數據集
這里如果直接讀取數據集會遇到“玄學”錯誤。
# 1、讀取數據集data = pd.read_csv("factor_returns.csv")
?
?顯而易見,上面的數據是存在字符串的。
但是這里方差過濾特征值是基于數據進行過濾。數據處理自然沒辦法處理字符串。
所以我們重新讀取數據:
# 1、讀取數據集data = pd.read_csv("factor_returns.csv")data = data.iloc[:, 1:-2] #從第2列到倒數第3列print(data)
?成功過濾掉無法進行數據處理的字符串。
2、創建低方差過濾轉換器(設置過濾閾值)
# 2、創建低方差過濾轉換器(設置過濾閾值)transfer = VarianceThreshold(threshold=500) #設置過濾閾值
3、低方差過濾處理
# 3、低方差過濾處理new_data = transfer.fit_transform(data)print(new_data)
?可以對比結果,成功過濾掉很多的冗余特征。
代碼
# 低方差過濾
def Variance_Filter():# 1、讀取數據集data = pd.read_csv("factor_returns.csv")data = data.iloc[:, 1:-2] #從第2列到倒數第3列print(data)# 2、創建低方差過濾轉換器(設置過濾閾值)transfer = VarianceThreshold(threshold=500) #設置過濾閾值# 3、低方差過濾處理new_data = transfer.fit_transform(data)print(new_data)
三、相關系數
1、基礎理論
皮爾遜相關系數:反映變量之間相關關系密切程度的統計指標。
相關系數性質:?
?
?(正相關:一個變量增長,另一個變量隨之增長)
、
2、API
scipy.stats.pearsonr
計算相關系數
# 計算相關系數r = pearsonr(data['pe_ratio'], data['pb_ratio'])print('相關系數\n', r)
四、主成分分析(PCA降維)
1、基礎理論
在降維的過程中,保留盡可能多的信息。
1、定義
高維數據轉化為低維數據的過程,在此過程中可能會舍棄原有數據,創造新的變量。
2、作用
數據維數壓縮,盡可能降低數據的維數(復雜度),損失少量信息。
3、過程
找到合適的曲線,通過距離運算得到主成分分析的結果。
2、API
sklearn.decomposition.PCA
過程:
1、獲取數據
# 1、獲取數據data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]print(data)
2、實例化降維轉換器類
n_components為整數:保留幾個參數
?n_components為小數:保留百分比的信息
# 2、實例化降維轉換器類# 整數:表示參數下降# 小數:表示保留百分比的信息# transfer = PCA(n_components=2) #參數降至2(從4->2)transfer = PCA(n_components=0.95) #保留0.9的信息
3、降維處理?
# 3、降維處理new_data = transfer.fit_transform(data)print(new_data)
代碼
# PCA降維
def PCA_Reduction():# 1、獲取數據data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]print(data)# 2、實例化降維轉換器類# 整數:表示參數下降# 小數:表示保留百分比的信息# transfer = PCA(n_components=2) #參數降至2(從4->2)transfer = PCA(n_components=0.95) #保留0.9的信息# 3、降維處理new_data = transfer.fit_transform(data)print(new_data)
總代碼
# 降維(特征選擇:低方差過濾和相關系數)(主成分分析:PCA降維)
from sklearn.feature_selection import VarianceThreshold
import pandas as pd
from scipy.stats import pearsonr
from sklearn.decomposition import PCA# 低方差過濾
def Variance_Filter():# 1、讀取數據集data = pd.read_csv("factor_returns.csv")data = data.iloc[:, 1:-2] #從第2列到倒數第3列print(data)# 2、創建低方差過濾轉換器(設置過濾閾值)transfer = VarianceThreshold(threshold=500) #設置過濾閾值# 3、低方差過濾處理new_data = transfer.fit_transform(data)print('低方差過濾處理\n', new_data)# 計算相關系數r = pearsonr(data['pe_ratio'], data['pb_ratio'])print('相關系數\n', r)# PCA降維
def PCA_Reduction():# 1、獲取數據data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]print(data)# 2、實例化降維轉換器類# 整數:表示參數下降# 小數:表示保留百分比的信息# transfer = PCA(n_components=2) #參數降至2(從4->2)transfer = PCA(n_components=0.95) #保留0.9的信息# 3、降維處理new_data = transfer.fit_transform(data)print(new_data)if __name__ == '__main__':# 低方差過濾Variance_Filter()# PCA降維PCA_Reduction()
總結
以上是生活随笔為你收集整理的机器学习(5)降维 -- 特征选择(低方差过滤与相关系数)与主成分分析(PCA降维)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(4)特征预处理
- 下一篇: 机器学习(6)KNN算法(K-近邻算法)