1 降維
1.1 定義
- 降維是指在某些限定條件下,降低隨機變量(特征)個數,得到一組“不相關”主變量的過程
- 降低隨機變量的個數
正是因為在進行訓練的時候,我們都是使用特征進行學習。如果特征本身存在問題或者特征之間相關性較強,對於算法學習預測會影響較大
1.2 降維的兩種方式
- 特征選擇
- 主成分分析(相當於特征提取)
2 特征選擇
2.1 定義
- 數據中包含冗余或無關變量(或稱特征、屬性、指標等),旨在從原有特征中找出主要特征。
2.2 方法
- Filter(過濾式):主要探究特征本身特點、特征與特征和目標值之間關聯
- 方差選擇法:低方差特征過濾
- 相關系數
- Embedded (嵌入式):算法自動選擇特征(特征與目標值之間的關聯)
- 決策樹:信息熵、信息增益
- 正則化:L1、L2
- 深度學習:卷積等
2.3 低方差特征過濾
- 特征方差小:某個特征大多樣本的值比較相近
- 特征方差大:某個特征很多樣本的值都有差別
2.3.1 API
sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
- 刪除所有低方差特征
方法:
Variance.fit_transform(X)
- X:numpy array格式的數據[n_samples,n_features]
- 返回值:訓練集差異低於threshold的特征將被刪除。默認值是保留所有非零方差特征,即刪除所有樣本中具有相同值的特征。
2.3.2 案例計算
對某些股票的指標特征之間進行一個篩選,除去'index,'date','return'列不考慮
- 准備
import pandas as pd
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr,spearmanr
from sklearn.decomposition import PCA
- 分析:
- 初始化VarianceThreshold,指定閥值方差
- 調用fit_transform
def variance_demo():
"""
刪除低方差特征——特征選擇
:return: None
"""
data = pd.read_csv("factor_returns.csv")
print(data)
# 1、實例化一個轉換器類
transfer = VarianceThreshold(threshold=1)
# 2、調用fit_transform
data = transfer.fit_transform(data.iloc[:, 1:10])
print("刪除低方差特征的結果:\n", data)
print("形狀:\n", data.shape)
return None
- 返回結果
index pe_ratio pb_ratio market_cap \
0 000001.XSHE 5.9572 1.1818 8.525255e+10
1 000002.XSHE 7.0289 1.5880 8.411336e+10
... ... ... ... ...
2316 601958.XSHG 52.5408 2.4646 3.287910e+10
2317 601989.XSHG 14.2203 1.4103 5.911086e+10
return_on_asset_net_profit du_return_on_equity ev \
0 0.8008 14.9403 1.211445e+12
1 1.6463 7.8656 3.002521e+11
... ... ... ...
2316 2.7444 2.9202 3.883803e+10
2317 2.0383 8.6179 2.020661e+11
earnings_per_share revenue total_expense date return
0 2.0100 2.070140e+10 1.088254e+10 2012-01-31 0.027657
1 0.3260 2.930837e+10 2.378348e+10 2012-01-31 0.082352
2 -0.0060 1.167983e+07 1.203008e+07 2012-01-31 0.099789
... ... ... ... ... ...
2315 0.2200 1.789082e+10 1.749295e+10 2012-11-30 0.137134
2316 0.1210 6.465392e+09 6.009007e+09 2012-11-30 0.149167
2317 0.2470 4.509872e+10 4.132842e+10 2012-11-30 0.183629
[2318 rows x 12 columns]
刪除低方差特征的結果:
[[ 5.95720000e+00 1.18180000e+00 8.52525509e+10 ..., 1.21144486e+12
2.07014010e+10 1.08825400e+10]
[ 7.02890000e+00 1.58800000e+00 8.41133582e+10 ..., 3.00252062e+11
2.93083692e+10 2.37834769e+10]
[ -2.62746100e+02 7.00030000e+00 5.17045520e+08 ..., 7.70517753e+08
1.16798290e+07 1.20300800e+07]
...,
[ 3.95523000e+01 4.00520000e+00 1.70243430e+10 ..., 2.42081699e+10
1.78908166e+10 1.74929478e+10]
[ 5.25408000e+01 2.46460000e+00 3.28790988e+10 ..., 3.88380258e+10
6.46539204e+09 6.00900728e+09]
[ 1.42203000e+01 1.41030000e+00 5.91108572e+10 ..., 2.02066110e+11
4.50987171e+10 4.13284212e+10]]
形狀:
(2318, 8)
2.4 相關系數
- 皮爾遜相關系數
- 斯皮爾曼相關系數
2.4.1 皮爾遜相關系數(Pearson Correlation Coefficient)
1.作用:反映變量之間相關關系密切程度的統計指標
2.公式:
3.特點:
- 相關系數的值介於–1與+1之間,即–1≤ r ≤+1
- 當r>0時,表示兩變量正相關,r<0時,兩變量為負相關
- 當|r|=1時,表示兩變量為完全相關,當r=0時,表示兩變量間無相關關系
- 當0<|r|<1時,表示兩變量存在一定程度的相關。且|r|越接近1,兩變量間線性關系越密切;|r|越接近於0,表示兩變量的線性相關越弱
- 一般可按三級划分:|r|<0.4為低度相關;0.4≤|r|<0.7為顯著性相關;0.7≤|r|<1為高度線性相關
4.案例:
(1)計算年廣告費投入與月均銷售額
(2)相關系數怎么計算
(3)最終計算:
(4)結論:
我們最終得出結論是廣告投入費與月平均銷售額之間有高度的正相關關系
5.API舉例
from scipy.stats import pearsonr
- x : (N,) array_like
- y : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)
def pea_demo():
"""
皮爾遜相關系數
:return:
"""
#准備數據
x1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]
#判斷
ret=pearsonr(x1,x2)
print("皮爾遜相關系數的結果是:",ret)
#結果
(0.9941983762371883, 4.9220899554573455e-09)
2.4.2 斯皮爾曼相關系數(Rank IC)
1.作用:反映變量之間相關關系密切程度的統計指標
2.公式:
n為等級個數,d為二列成對變量的等級差數
3. 特點
- 斯皮爾曼相關系數表明 X (自變量) 和 Y (因變量)的相關方向。
- 如果當X增加時, Y 趨向於增加, 斯皮爾曼相關系數則為正
- 取值 [-1, 1]之間
斯皮爾曼相關系數比皮爾遜相關系數應用更加廣泛
4.API
from scipy.stats import spearmanr
5.案例
def spea_demo():
"""
斯皮爾遜相關系數
:return:
"""
#准備數據
x1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]
#判斷
ret=spearmanr(x1,x2)
print("斯皮爾遜相關系數的結果是:",ret)
#結果
SpearmanrResult(correlation=0.9999999999999999, pvalue=6.646897422032013e-64)
3 主成分分析(PCA)
3.1 定義
- 定義:高維數據轉化為低維數據的過程,在此過程中可能會舍棄原有數據、創造新的變量
- 作用:是數據維數壓縮,盡可能降低原數據的維數(復雜度),損失少量信息。
- 應用:回歸分析或者聚類分析當中
3.2 API
sklearn.decomposition.PCA(n_components=None)
- n_components:
- 小數:表示保留百分之多少的信息
- 整數:減少到多少特征
方法:
- PCA.fit_transform(X)
- X:numpy array格式的數據[n_samples,n_features]
- 返回值:轉換后指定維度的array
案例:
def pca_demo():
"""
pca降維
:return:
"""
data=[[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
#pca小數保留百分比
#傳小數表示保留多少信息,傳整數表示保留多少維度
transfer=PCA(n_components=0.9)
transfer_data=transfer.fit_transform(data)
print("保留0.9的數據最后維度為:\n",transfer_data)
transfer = PCA(n_components=3)
transfer_data = transfer.fit_transform(data)
print("保留3列數據最后維度為:\n", transfer_data)
返回結果:
保留90%的信息,降維結果為:
[[ -3.13587302e-16 3.82970843e+00]
[ -5.74456265e+00 -1.91485422e+00]
[ 5.74456265e+00 -1.91485422e+00]]
降維到3維的結果:
[[ -3.13587302e-16 3.82970843e+00 4.59544715e-16]
[ -5.74456265e+00 -1.91485422e+00 4.59544715e-16]
[ 5.74456265e+00 -1.91485422e+00 4.59544715e-16]]
4總結
- 降維的定義【了解】
- 就是改變特征值,選擇哪列保留,哪列刪除
- 目標是得到一組”不相關“的主變量
- 降維的兩種方式【了解】
- 特征選擇
- 主成分分析(可以理解一種特征提取的方式)
- 特征選擇【知道】
- 定義:提出數據中的冗余變量
- 方法:
- Filter(過濾式):主要探究特征本身特點、特征與特征和目標值之間關聯
- 方差選擇法:低方差特征過濾
- 相關系數
- Embedded (嵌入式):算法自動選擇特征(特征與目標值之間的關聯)
- 決策樹:信息熵、信息增益
- 正則化:L1、L2
- Filter(過濾式):主要探究特征本身特點、特征與特征和目標值之間關聯
- 低方差特征過濾【知道】
- 把方差比較小的某一列進行剔除
- api:sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
- 刪除所有低方差特征
- 注意,參數threshold一定要進行值的指定
- 相關系數【掌握】
- 主要實現方式:
- 皮爾遜相關系數
- 斯皮爾曼相關系數
- 皮爾遜相關系數
- 通過具體值的大小進行計算
- 相對復雜
- api:from scipy.stats import pearsonr
- 返回值,越接近|1|,相關性越強;越接近0,相關性越弱
- 斯皮爾曼相關系數
- 通過等級差進行計算
- 比上一個簡單
- api:from scipy.stats import spearmanr
- 返回值,越接近|1|,相關性越強;越接近0,相關性越弱
- 主要實現方式:
- pca【知道】
- 定義:高維數據轉換為低維數據,然后產生了新的變量
- api:sklearn.decomposition.PCA(n_components=None)
- n_components
- 整數 -- 表示降低到幾維
- 小數 -- 保留百分之多少的信息
- n_components