sklearn因子分析(python)

2021-08-11 22:52:29 字數 2886 閱讀 9549

因子分析(factor analysis)是指研究從變數群中提取共性因子的統計技術,這裡的共性因子指的是不同變數之間內在的隱藏因子。例如,乙個學生的英語、資料、語文成績都很好,那麼潛在的共性因子可能是智力水平高。因此,因子分析的過程其實是尋找共性因子和個性因子並得到最優解釋的過程。

因子分析有兩個核心問題:一是如何構造因子變數,二是如何對因子變數進行命名解釋。因子分析有下面4個基本步驟:

1、確定原有若干變數是否適合於因子分析。因子分析的基本邏輯是從原始變數中構造出少數幾個具有代表意義的因子變數,這就要求原有變數之間要具有比較強的相關性,否則,因子分析將無法提取變數間的「共性特徵」(變數間沒有共性還如何提取共性?)。實際應用時,可以使用相關性矩陣進行驗證,如果相關係數小於0.3,那麼變數間的共性較小,不適合使用因子分析(

檢視變數間的相關性,也就是共有特徵是否有必要提取共性)

mport pandas as pd

mydata = pd.read_csv(r'd:\pythonddd\datafiles\data.csv')

mydata.describe()

import math

df = pd.dataframe(mydata)

df.boxplot(column = '行駛里程1', by='車號')#檢視車號的行駛里程

df.boxplot(column = '平均時速', by='車號')#檢視車號的平均時速

#樣本離差矩陣

import numpy as np

mydata = mydata.drop('車號', 1)

mydata = mydata.drop('行駛里程1', 1)

mydata_mean = mydata.mean()

e = np.mat(np.zeros((14, 14)))

for i in range(len(mydata)):

e += (mydata.iloc[i, :].reshape(14, 1) - mydata_mean.reshape(14, 1)) * (mydata.iloc[i, :].reshape(1, 14) - mydata_mean.reshape(1, 14))

#樣本相關性矩陣

r = np.mat(np.zeros((14, 14)))

for i in range(14):

for j in range(14):

r[i, j] = e[i, j]/math.sqrt(e[i, i] * e[j, j])

或者

r1 = mydata.corr()       #樣本相關性矩陣

2、 構造因子變數。因子分析中有多種確定因子變數的方法,如基於主成分模型的主成分分析法和基於因子分析模型的主軸因子法、極大似然法、最小二乘法等。其中基於主成分模型的主成分分析法是使用最多的因子分析方法之一。(

不同方法不同效果

import numpy.linalg as nlg

eig_value, eigvector = nlg.eig(r)#求矩陣r的全部特徵值,構成向量e。

print(eig_value, eigvector)

eig = pd.dataframe()

eig['names'] = mydata.columns

eig['eig_value'] = eig_value

eig.sort_values('eig_value', ascending=false, inplace=true)

#求因子模型的因子載荷陣,尋找公共因子個數m

for m in range(1, 14):

if eig['eig_value'][:m].sum()/eig['eig_value'].sum() >= 0.8:

print(m)

break

#因子載荷矩陣,只是因子,

a = np.mat(np.zeros((14, 6)))

a[:,0]=math.sqrt(eig_value[0])*eigvector[:,0]

a[:,1]=math.sqrt(eig_value[1])*eigvector[:,1]

a[:,2]=math.sqrt(eig_value[2])*eigvector[:,2]

a[:,3]=math.sqrt(eig_value[3])*eigvector[:,3]

a[:,4]=math.sqrt(eig_value[4])*eigvector[:,4]

a[:,5]=math.sqrt(eig_value[5])*eigvector[:,5]

a=pd.dataframe(a)

a.columns=['factor1','factor2','factor3','factor4','factor5','factor6']

3、利用旋轉使得因子變數更具有可解釋性。在實際分析工作中,主要是因子分析得到因子和原變數的關係,從而對新的因子能夠進行命名和解釋,否則其不具有可解釋性的前提下對比pca就沒有明顯的可解釋價值。

4、計算因子變數的得分。計算因子得分是因子分析的最後一步,因子變數確定以後,對每一樣本資料,希望得到它們在不同因子上的具體資料值,這些數值就是因子得分,它和原變數的得分相對應。(生成新的資料)

from sklearn.cluster import kmeans

for i in range(2, 10):

clf = kmeans(n_clusters=i)

clf.fit(train_data)

# print(clf.cluster_centers_)#類中心

print(i, clf.inertia_)#用來評估簇的個數是否合適,距離越**明簇分的越好,選取臨界點的簇個數

因子分析 因子得分

因子分析的最後一步了,悲傷 在因子分析中,人們一般關注的重點是估計因子模型的引數 載荷矩陣 有時公共因子的估計 即所謂的因子得分 也是需要的,因子得分可以用於模型診斷,也可以作為下一步分析的原始資料。需要指出的是,因子的得分計算並不是通常意義下的引數估計,他是對不可觀測的隨機變數 取值的估計 通常可...

因子分析原理

因子分析是根據相關性大小把原始變數進行分組,使得同組內的變數之間相關性較高,而不同組的變數間的相關性則較低。每組變數代表乙個基本結構,並用乙個不可觀測的綜合變數表示,這個基本結構就稱為公共因子。先介紹一下因子分析的數學模型,如下 因子模型 正交因子模型 1 確定待分析的原有若干變數是否適合進行因子分...

因子分析模板

2011a 2模板 p10 因子分析的主要步驟如下 資料標準化 由於不同重金屬元素的量綱可能不同,因此為了消除量綱對資料的影響,對所有的重金屬採用下面的公式對資料進行歸一化處理 其中2 計算協方差矩陣s 因為已經對資料進行歸一化處理,協方差的大小在一定程度上表示了個元素之間的關係,記每個區有n個取樣...