国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

因子分析——python

這篇具有很好參考價(jià)值的文章主要介紹了因子分析——python。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、起源

二、基本思想

三、算法用途

四、因子分析步驟

五、factor_analyzer庫(kù)

四、實(shí)例詳解

1.導(dǎo)入庫(kù)

2.讀取數(shù)據(jù)

3.充分性檢測(cè)

3.1?Bartlett's球狀檢驗(yàn)

?3.2?KMO檢驗(yàn)

4.選擇因子個(gè)數(shù)

4.1?特征值和特征向量

4.2?可視化展示

4.3 可視化中顯示中文不報(bào)錯(cuò)

5.因子旋轉(zhuǎn)

5.1 建立因子分析模型

5.2?查看因子方差-get_communalities()

5.3?查看旋轉(zhuǎn)后的特征值

?5.4?查看成分矩陣

?5.5?查看因子貢獻(xiàn)率

?6.隱藏變量可視化

7.轉(zhuǎn)成新變量

五·、參考資料


一、起源

????????因子分析的起源是這樣的:1904年英國(guó)的一個(gè)心理學(xué)家發(fā)現(xiàn)學(xué)生的英語、法語和古典語成績(jī)非常有相關(guān)性,他認(rèn)為這三門課程背后有一個(gè)共同的因素驅(qū)動(dòng),最后將這個(gè)因素定義為“語言能力”。

????????基于這個(gè)想法,發(fā)現(xiàn)很多相關(guān)性很高的因素背后有共同的因子驅(qū)動(dòng),從而定義了因子分析,這便是因子分析的由來。

二、基本思想

????????我們?cè)偻ㄟ^一個(gè)更加實(shí)際的例子來理解因子分析的基本思想:

????????現(xiàn)在假設(shè)一個(gè)同學(xué)的數(shù)學(xué)、物理、化學(xué)、生物都考了滿分,那么我們可以認(rèn)為這個(gè)學(xué)生的理性思維比較強(qiáng),在這里理性思維就是我們所說的一個(gè)因子。在這個(gè)因子的作用下,偏理科的成績(jī)才會(huì)那么高。

????????到底什么是因子分析?就是假設(shè)現(xiàn)有全部自變量x的出現(xiàn)是因?yàn)槟硞€(gè)潛在變量的作用,這個(gè)潛在的變量就是我們說的因子。在這個(gè)因子的作用下,x能夠被觀察到。

????????因子分析就是將存在某些相關(guān)性的變量提煉為較少的幾個(gè)因子,用這幾個(gè)因子去表示原本的變量,也可以根據(jù)因子對(duì)變量進(jìn)行分類。

????????因子分子本質(zhì)上也是降維的過程,和主成分分析(PCA)算法比較類似。

三、算法用途

????????因子分析法和主成分分析法有很多類似之處。因子分析的主要目的是用來描述隱藏在一組測(cè)量到的變量中的一些更基本的,但又無法直接測(cè)量到的隱性變量。因子分析法也可以用來綜合評(píng)價(jià)。

????????其主要思路是利用研究指標(biāo)的之間存在一定的相關(guān)性,從而推想是否存在某些潛在的共性因子,而這些不同的潛在的共性因子不同程度地共同影響著研究指標(biāo)。因子分析可以在許多變量中找出隱藏的具有代表性的因子,將共同本質(zhì)的變量歸入一個(gè)因子,可以減少變量的數(shù)目。

四、因子分析步驟

應(yīng)用因子分析法的主要步驟如下:

  • 對(duì)所給的數(shù)據(jù)樣本進(jìn)行標(biāo)準(zhǔn)化處理

  • 計(jì)算樣本的相關(guān)矩陣R

  • 求相關(guān)矩陣R的特征值、特征向量

  • 根據(jù)系統(tǒng)要求的累積貢獻(xiàn)度確定主因子的個(gè)數(shù)

  • 計(jì)算因子載荷矩陣A

  • 最終確定因子模型

五、factor_analyzer庫(kù)

利用Python進(jìn)行因子分析的核心庫(kù)是:factor_analyzer

pip?install?factor_analyzer

這個(gè)庫(kù)主要有兩個(gè)主要的模塊需要學(xué)習(xí):

  • factor_analyzer.analyze(重點(diǎn))

  • factor_analyzer.factor_analyzer

官網(wǎng)學(xué)習(xí)地址:factor_analyzer package — factor_analyzer 0.3.1 documentation

四、實(shí)例詳解

因子分析——python

?數(shù)據(jù)來源于中國(guó)統(tǒng)計(jì)年鑒。

1.導(dǎo)入庫(kù)

# 數(shù)據(jù)處理
import pandas as pd
import numpy as np

# 繪圖
import seaborn as sns
import matplotlib.pyplot as plt
# 因子分析
from factor_analyzer import FactorAnalyzer

2.讀取數(shù)據(jù)

df = pd.read_csv("D:\桌面\demo.csv",encoding='gbk')
df

輸出:

因子分析——python

?如果不想要城市那一列的話,可以在讀取的時(shí)候就刪除,也可以后面再刪

比如,讀取時(shí)刪除

df = pd.read_csv("D:\桌面\demo.csv", index_col=0,encoding='gbk').reset_index(drop=True)
df

返回:

因子分析——python

?然后我們查詢一下,數(shù)據(jù)的缺失值情況:

df.isnull().sum()

返回:

因子分析——python

?然后,我們可以針對(duì)的,對(duì)數(shù)據(jù)進(jìn)行一次處理:

比如刪除無效字段的那一列

#  去掉無效字段
df.drop(["變量名1","變量名2","變量名3"],axis=1,inplace=True)

或者,刪除空值

# 去掉空值
df.dropna(inplace=True)

3.充分性檢測(cè)

????????在進(jìn)行因子分析之前,需要先進(jìn)行充分性檢測(cè),主要是檢驗(yàn)相關(guān)特征陣中各個(gè)變量間的相關(guān)性,是否為單位矩陣,也就是檢驗(yàn)各個(gè)變量是否各自獨(dú)立。

3.1?Bartlett's球狀檢驗(yàn)

????????檢驗(yàn)總體變量的相關(guān)矩陣是否是單位陣(相關(guān)系數(shù)矩陣對(duì)角線的所有元素均為1,所有非對(duì)角線上的元素均為零);即檢驗(yàn)各個(gè)變量是否各自獨(dú)立。

????????如果不是單位矩陣,說明原變量之間存在相關(guān)性,可以進(jìn)行因子分子;反之,原變量之間不存在相關(guān)性,數(shù)據(jù)不適合進(jìn)行主成分分析

from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity

chi_square_value, p_value = calculate_bartlett_sphericity(df)
chi_square_value, p_value

返回:

因子分析——python

?3.2?KMO檢驗(yàn)

????????檢查變量間的相關(guān)性和偏相關(guān)性,取值在0-1之間;KOM統(tǒng)計(jì)量越接近1,變量間的相關(guān)性越強(qiáng),偏相關(guān)性越弱,因子分析的效果越好。

通常取值從0.6開始進(jìn)行因子分析

#KMO檢驗(yàn)
from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(df)
kmo_model

返回:

因子分析——python

?通過結(jié)果可以看到KMO大于0.6,也說明變量之間存在相關(guān)性,可以進(jìn)行分析。

4.選擇因子個(gè)數(shù)

方法:計(jì)算相關(guān)矩陣的特征值,進(jìn)行降序排列

4.1?特征值和特征向量

faa = FactorAnalyzer(25,rotation=None)
faa.fit(df)

# 得到特征值ev、特征向量v
ev,v=faa.get_eigenvalues()
print(ev,v)

返回:

因子分析——python

4.2?可視化展示

將特征值和因子個(gè)數(shù)的變化繪制成圖形:

 # 同樣的數(shù)據(jù)繪制散點(diǎn)圖和折線圖
plt.scatter(range(1, df.shape[1] + 1), ev)
plt.plot(range(1, df.shape[1] + 1), ev)

# 顯示圖的標(biāo)題和xy軸的名字
# 最好使用英文,中文可能亂碼
plt.title("Scree Plot")  
plt.xlabel("Factors")
plt.ylabel("Eigenvalue")

plt.grid()  # 顯示網(wǎng)格
plt.show()  # 顯示圖形

返回:

因子分析——python

?從上面的圖形中,我們明確地看到:選擇2或3個(gè)因子就可以了

4.3 可視化中顯示中文不報(bào)錯(cuò)

只需要在畫圖前,再導(dǎo)入一個(gè)庫(kù)即可,見代碼

import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默認(rèn)字體
mpl.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負(fù)號(hào)'-'顯示為方塊的問題

5.因子旋轉(zhuǎn)

5.1 建立因子分析模型

在這里選擇,最大方差化因子旋轉(zhuǎn)

# 選擇方式: varimax 方差最大化
# 選擇固定因子為 2 個(gè)
faa_two = FactorAnalyzer(2,rotation='varimax')
faa_two.fit(df)

返回:

因子分析——python

ratation參數(shù)的其他取值情況:

  • varimax (orthogonal rotation)

  • promax (oblique rotation)

  • oblimin (oblique rotation)

  • oblimax (orthogonal rotation)

  • quartimin (oblique rotation)

  • quartimax (orthogonal rotation)

  • equamax (orthogonal rotation)

5.2?查看因子方差-get_communalities()

查看公因子方差

# 公因子方差
faa_two.get_communalities()

返回:

因子分析——python

?查看每個(gè)變量的公因子方差數(shù)據(jù)

pd.DataFrame(faa_two.get_communalities(),index=df.columns)

返回:

因子分析——python

5.3?查看旋轉(zhuǎn)后的特征值

faa_two.get_eigenvalues()

返回:

因子分析——python

pd.DataFrame(faa_two.get_eigenvalues())

返回:

因子分析——python

?5.4?查看成分矩陣

查看它們構(gòu)成的成分矩陣:

# 變量個(gè)數(shù)*因子個(gè)數(shù)
faa_two.loadings_

返回:

?因子分析——python

如果轉(zhuǎn)成DataFrame格式,index就是我們的變量,columns就是指定的因子factor。轉(zhuǎn)DataFrame格式后的數(shù)據(jù):

pd.DataFrame(faa_two.loadings_,index=df.columns)

返回:

因子分析——python

?5.5?查看因子貢獻(xiàn)率

通過理論部分的解釋,我們發(fā)現(xiàn)每個(gè)因子都對(duì)變量有一定的貢獻(xiàn),存在某個(gè)貢獻(xiàn)度的值,在這里查看3個(gè)和貢獻(xiàn)度相關(guān)的指標(biāo):

  • 總方差貢獻(xiàn):variance (numpy array) – The factor variances

  • 方差貢獻(xiàn)率:proportional_variance (numpy array) – The proportional factor variances

  • 累積方差貢獻(xiàn)率:cumulative_variances (numpy array) – The cumulative factor variances

?我們來看一下總方差貢獻(xiàn)吧

faa_two.get_factor_variance()

返回:

?因子分析——python

?6.隱藏變量可視化

為了更直觀地觀察每個(gè)隱藏變量和哪些特征的關(guān)系比較大,進(jìn)行可視化展示,為了方便取上面相關(guān)系數(shù)的絕對(duì)值:

df1 = pd.DataFrame(np.abs(faa_two.loadings_),index=df.columns)
print(df1)

返回:因子分析——python

然后我們通過熱力圖將系數(shù)矩陣?yán)L制出來:

# 繪圖

plt.figure(figsize = (14,14))
ax = sns.heatmap(df1, annot=True, cmap="BuPu")

# 設(shè)置y軸字體大小
ax.yaxis.set_tick_params(labelsize=15)
plt.title("Factor Analysis", fontsize="xx-large")

# 設(shè)置y軸標(biāo)簽
plt.ylabel("Sepal Width", fontsize="xx-large")
# 顯示圖片
plt.show()

# 保存圖片
# plt.savefig("factorAnalysis", dpi=500)

返回:

因子分析——python

7.轉(zhuǎn)成新變量

上面我們已經(jīng)知道了2個(gè)因子比較合適,可以將原始數(shù)據(jù)轉(zhuǎn)成2個(gè)新的特征,具體轉(zhuǎn)換方式為:

faa_two.transform(df)

返回:

因子分析——python

?轉(zhuǎn)成DataFrame格式后數(shù)據(jù)展示效果更好:

df2 = pd.DataFrame(faa_two.transform(df))
print(df2)

返回:

因子分析——python

五·、參考資料

1、Factor Analysis:Factor Analysis with Python — DataSklr

2、多因子分析:因子分析(factor analysis)例子–Python | 文藝數(shù)學(xué)君

3、factor_analyzer package的官網(wǎng)使用手冊(cè):factor_analyzer package — factor_analyzer 0.3.1 documentation

4、淺談主成分分析和因子分析:淺談主成分分析與因子分析 - 知乎文章來源地址http://www.zghlxwxcb.cn/news/detail-402850.html

到了這里,關(guān)于因子分析——python的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包