聚類算法
文章目錄
學習目標
- 掌握聚類算法實現過程
- 知道K-means算法原理
- 知道聚類算法中的評估模型
- 說明K-means的優缺點
- 瞭解聚類中的算法優化方式
- 應用Kmeans實現聚類任務
6.6 特徵降維
1 降維
1.1 定義
降維是指在某些限定條件下,降低隨機變量(特徵)個數,得到一組“不相關”主變量的過程
- 降低隨機變量的個數
- 相關特徵(correlated feature)
- 相對溼度與降雨量之間的相關
- 等等
正是因爲在進行訓練的時候,我們都是使用特徵進行學習。如果特徵本身存在問題或者特徵之間相關性較強,對於算法學習預測會影響較大
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’列不考慮**(這些類型不匹配,也不是所需要指標)**
一共這些特徵
pe_ratio,pb_ratio,market_cap,return_on_asset_net_profit,du_return_on_equity,ev,earnings_per_share,revenue,total_expense
index,pe_ratio,pb_ratio,market_cap,return_on_asset_net_profit,du_return_on_equity,ev,earnings_per_share,revenue,total_expense,date,return
0,000001.XSHE,5.9572,1.1818,85252550922.0,0.8008,14.9403,1211444855670.0,2.01,20701401000.0,10882540000.0,2012-01-31,0.027657228229937388
1,000002.XSHE,7.0289,1.588,84113358168.0,1.6463,7.8656,300252061695.0,0.326,29308369223.2,23783476901.2,2012-01-31,0.08235182370820669
2,000008.XSHE,-262.7461,7.0003,517045520.0,-0.5678,-0.5943,770517752.56,-0.006,11679829.03,12030080.04,2012-01-31,0.09978900335112327
3,000060.XSHE,16.476,3.7146,19680455995.0,5.6036,14.617,28009159184.6,0.35,9189386877.65,7935542726.05,2012-01-31,0.12159482758620697
4,000069.XSHE,12.5878,2.5616,41727214853.0,2.8729,10.9097,81247380359.0,0.271,8951453490.28,7091397989.13,2012-01-31,-0.0026808154146886697
- 分析
1、初始化VarianceThreshold,指定閥值方差
2、調用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.公式計算案例(瞭解,不用記憶)
公式
舉例
- 比如說我們計算年廣告費投入與月均銷售額
那麼之間的相關係數怎麼計算
最終計算:
= 0.9942
所以我們最終得出結論是廣告投入費與月平均銷售額之間有高度的正相關關係。
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.api
- from scipy.stats import pearsonr
- x : (N,) array_like
- y : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)
5.案例
from scipy.stats import pearsonr
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]
pearsonr(x1, x2)
結果
(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.案例
from scipy.stats import spearmanr
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]
spearmanr(x1, x2)
結果
SpearmanrResult(correlation=0.9999999999999999, pvalue=6.646897422032013e-64)
3 主成分分析
3.1 什麼是主成分分析(PCA)
- 定義:高維數據轉化爲低維數據的過程,在此過程中可能會捨棄原有數據、創造新的變量
- 作用:是數據維數壓縮,儘可能降低原數據的維數(複雜度),損失少量信息。
- 應用:迴歸分析或者聚類分析當中
對於信息一詞,在決策樹中會進行介紹
那麼更好的理解這個過程呢?我們來看一張圖
3.2 API
- sklearn.decomposition.PCA(n_components=None)
- 將數據分解爲較低維數空間
- n_components:
- 小數:表示保留百分之多少的信息
- 整數:減少到多少特徵
- PCA.fit_transform(X) X:numpy array格式的數據[n_samples,n_features]
- 返回值:轉換後指定維度的array
3.3 數據計算
先拿個簡單的數據計算一下
[[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
from sklearn.decomposition import PCA
def pca_demo():
"""
對數據進行PCA降維
:return: None
"""
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]
# 1、實例化PCA, 小數——保留多少信息
transfer = PCA(n_components=0.9)
# 2、調用fit_transform
data1 = transfer.fit_transform(data)
print("保留90%的信息,降維結果爲:\n", data1)
# 1、實例化PCA, 整數——指定降維到的維數
transfer2 = PCA(n_components=3)
# 2、調用fit_transform
data2 = transfer2.fit_transform(data)
print("降維到3維的結果:\n", data2)
return None
返回結果:
保留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]]