這兩天用學了主成分分析,用的是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)
這是後面的幾列
只要購買客戶資料,對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)
對df表進行相關性檢測,看每個欄位的相關度,刪除相關度高的字段,減少計算量。如果自變數屬於中度以上線性相關的(>0.6)多個變數,只保留乙個即可。
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)
df.drop(['administrative_duration', 'informational_duration',
'productrelated_duration',
'bouncerates'],axis=1, inplace=true)
print(df)
x = df
#對pagevalues相差太大,對其進行標準化
from sklearn import preprocessing
x = preprocessing.scale(x)
#用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%。
右邊是降維後的圖。
主成分分析 降維
import pandas as pd 引數初始化 inputfile data principal component.xls outputfile tmp dimention reducted.xls 降維後的資料 data pd.read excel inputfile,header none...
資料降維 主成分分析(PCA)
主成分分析 pca 是一種比較經典的降維方法,它的思想主要是將資料對映到低維空間時使得資料在低維空間的方差最大。演算法如下 python 如下,我主要使用了兩種方法特徵值分解和奇異值分解。import numpy as np import matplotlib.pyplot as plt from ...
scikit learn 主成分分析 資料降維
筆記 import matplotlib.pyplot as plt from sklearn.datasets import load iris from sklearn.decomposition import pca iris load iris y iris.target x iris.da...