數據科學 第 5 章 主成分分析(降維)、相關性

這兩天用學了主成分分析,用的是PCA。主成分分析就是降維,通過線性組合,把多個原始變量合併成若干個主成分,這樣每個主成分都變成原始變量的線性組合。所以你想看具體哪個特徵對結果的影響大,通過PCA是看不到的。但PCA能把原來的10+數據特徵轉變爲幾個,實現過程如下:

導入數據:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

inputfile = 'C:/Users/xiaom/Desktop/data/online_shoppers_intention.csv'
df = pd.read_csv(inputfile)

這是後面的幾列
clipboard.png

1、數據處理

只要購買客戶數據,對VisitorType、weekend數據做處理,轉換爲0,1;再刪除不要的字段

#只要購買客戶的數據
df = df[df['Revenue'] == True]
df['VisitorType'] = np.where(df['VisitorType'] == 'Returning_Visitor',1,0)
df['workday'] = np.where(df['Weekend']==True,0,1)
df.drop(['Weekend','Revenue','Month'], axis=1, inplace=True)

2、相關性檢測

對df表進行相關性檢測,看每個字段的相關度,刪除相關度高的字段,減少計算量。如果自變量屬於中度以上線性相關的(>0.6)多個變量,只保留一個即可。
clipboard.png
1、2相關係數0.61;3、4係數爲0.63;5、6爲0.91;7、8爲0.74。相關度一般在0.64以上就認爲是比較相關的關係,所以刪除5

#求各字段的相關性,用corr()函數,並保留2位小數
df.corr().round(2)
#結果:1,2相關係數0.61;3,4係數爲0.63;5,6爲0.91;7,8爲0.74。所以對相關性高的保留1個字段
df.drop(['Administrative_Duration', 'Informational_Duration',
         'ProductRelated_Duration',
         'BounceRates'],axis=1, inplace=True)
print(df)

3、標準化處理

x = df
#對PageValues相差太大,對其進行標準化
from sklearn import preprocessing
x = preprocessing.scale(x)

4、PCA

#用PCA(主成分分析法),來查看對購買影響最大的特徵
from sklearn.decomposition import PCA
model = PCA(n_components=7)   #把數據降到6維
model.fit(x)
print('降到6維後,這6維的代表性爲:')
print(model.explained_variance_ratio_)
print(model.components_) #返回具有最大方差的成分
print('返回參數的值')
print(model.get_params)  #返回各個參數的值
#print(model.get_precision())

#下面是畫圖的
x2 = model.transform(x)
df['pca1'] = x2[:,0]
df['pca2'] = x2[:,1]
#print(df.head( ))
sns.lmplot("pca1","pca2", data=df, fit_reg=False)
plt.show()

左邊是降維後的結果,68%左右,數據從原來的10維下降到了6維。從結果看,這個數據可能不太適合用pca來分析,因爲降到6維後的代筆性不足70%。
右邊是降維後的圖。
clipboard.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章