<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
因子分析的起源是這樣的:1904年英國的一個心理學家發現學生的英語、法語和古典語成績非常有相關性,他認為這三門課程背後有一個共同的因素驅動,最後將這個因素定義為“語言能力”。
基於這個想法,發現很多相關性很高的因素背後有共同的因子驅動,從而定義了因子分析,這便是因子分析的由來。
我們再通過一個更加實際的例子來理解因子分析的基本思想:
現在假設一個同學的數學、物理、化學、生物都考了滿分,那麼我們可以認為這個學生的理性思維比較強,在這裡理性思維就是我們所說的一個因子。在這個因子的作用下,偏理科的成績才會那麼高。
到底什麼是因子分析?就是假設現有全部自變數x的出現是因為某個潛在變數的作用,這個潛在的變數就是我們說的因子。在這個因子的作用下,x能夠被觀察到。
因子分析就是將存在某些相關性的變數提煉為較少的幾個因子,用這幾個因子去表示原本的變數,也可以根據因子對變數進行分類。
因子分子本質上也是降維的過程,和主成分分析(PCA)演演算法比較類似。
因子分析法和主成分分析法有很多類似之處。因子分析的主要目的是用來描述隱藏在一組測量到的變數中的一些更基本的,但又無法直接測量到的隱性變數。因子分析法也可以用來綜合評價。
其主要思路是利用研究指標的之間存在一定的相關性,從而推想是否存在某些潛在的共性因子,而這些不同的潛在的共性因子不同程度地共同影響著研究指標。因子分析可以在許多變數中找出隱藏的具有代表性的因子,將共同本質的變數歸入一個因子,可以減少變數的數目。
應用因子分析法的主要步驟如下:
利用Python進行因子分析的核心庫是:factor_analyzer
pip install factor_analyzer
這個庫主要有兩個主要的模組需要學習:
官網學習地址:factor_analyzer package — factor_analyzer 0.3.1 documentation
資料來源於中國統計年鑑。
# 資料處理 import pandas as pd import numpy as np # 繪圖 import seaborn as sns import matplotlib.pyplot as plt # 因子分析 from factor_analyzer import FactorAnalyzer
df = pd.read_csv("D:桌面demo.csv",encoding='gbk') df
輸出:
如果不想要城市那一列的話,可以在讀取的時候就刪除,也可以後面再刪
比如,讀取時刪除
df = pd.read_csv("D:桌面demo.csv", index_col=0,encoding='gbk').reset_index(drop=True) df
返回:
然後我們查詢一下,資料的缺失值情況:
df.isnull().sum()
返回:
然後,我們可以針對的,對資料進行一次處理:
比如刪除無效欄位的那一列
# 去掉無效欄位 df.drop(["變數名1","變數名2","變數名3"],axis=1,inplace=True)
或者,刪除空值
# 去掉空值 df.dropna(inplace=True)
在進行因子分析之前,需要先進行充分性檢測,主要是檢驗相關特徵陣中各個變數間的相關性,是否為單位矩陣,也就是檢驗各個變數是否各自獨立。
檢驗總體變數的相關矩陣是否是單位陣(相關係數矩陣對角線的所有元素均為1,所有非對角線上的元素均為零);即檢驗各個變數是否各自獨立。
如果不是單位矩陣,說明原變數之間存在相關性,可以進行因子分子;反之,原變數之間不存在相關性,資料不適合進行主成分分析
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity chi_square_value, p_value = calculate_bartlett_sphericity(df) chi_square_value, p_value
返回:
檢查變數間的相關性和偏相關性,取值在0-1之間;KOM統計量越接近1,變數間的相關性越強,偏相關性越弱,因子分析的效果越好。
通常取值從0.6開始進行因子分析
#KMO檢驗 from factor_analyzer.factor_analyzer import calculate_kmo kmo_all,kmo_model=calculate_kmo(df) kmo_model
返回:
通過結果可以看到KMO大於0.6,也說明變數之間存在相關性,可以進行分析。
方法:計算相關矩陣的特徵值,進行降序排列
faa = FactorAnalyzer(25,rotation=None) faa.fit(df) # 得到特徵值ev、特徵向量v ev,v=faa.get_eigenvalues() print(ev,v)
返回:
將特徵值和因子個數的變化繪製成圖形:
# 同樣的資料繪製散點圖和折線圖 plt.scatter(range(1, df.shape[1] + 1), ev) plt.plot(range(1, df.shape[1] + 1), ev) # 顯示圖的標題和xy軸的名字 # 最好使用英文,中文可能亂碼 plt.title("Scree Plot") plt.xlabel("Factors") plt.ylabel("Eigenvalue") plt.grid() # 顯示網格 plt.show() # 顯示圖形
返回:
從上面的圖形中,我們明確地看到:選擇2或3個因子就可以了
只需要在畫圖前,再匯入一個庫即可,見程式碼
import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定預設字型 mpl.rcParams['axes.unicode_minus'] = False # 解決儲存影象是負號'-'顯示為方塊的問題
在這裡選擇,最大方差化因子旋轉
# 選擇方式: varimax 方差最大化 # 選擇固定因子為 2 個 faa_two = FactorAnalyzer(2,rotation='varimax') faa_two.fit(df)
返回:
ratation引數的其他取值情況:
- varimax (orthogonal rotation)
- promax (oblique rotation)
- oblimin (oblique rotation)
- oblimax (orthogonal rotation)
- quartimin (oblique rotation)
- quartimax (orthogonal rotation)
- equamax (orthogonal rotation)
檢視公因子方差
# 公因子方差 faa_two.get_communalities()
返回:
檢視每個變數的公因子方差資料
pd.DataFrame(faa_two.get_communalities(),index=df.columns)
返回:
faa_two.get_eigenvalues()
返回:
pd.DataFrame(faa_two.get_eigenvalues())
返回:
檢視它們構成的成分矩陣:
# 變數個數*因子個數 faa_two.loadings_
返回:
如果轉成DataFrame格式,index就是我們的變數,columns就是指定的因子factor。轉DataFrame格式後的資料:
pd.DataFrame(faa_two.loadings_,index=df.columns)
返回:
通過理論部分的解釋,我們發現每個因子都對變數有一定的貢獻,存在某個貢獻度的值,在這裡檢視3個和貢獻度相關的指標:
我們來看一下總方差貢獻吧
faa_two.get_factor_variance()
返回:
為了更直觀地觀察每個隱藏變數和哪些特徵的關係比較大,進行視覺化展示,為了方便取上面相關係數的絕對值:
df1 = pd.DataFrame(np.abs(faa_two.loadings_),index=df.columns) print(df1)
返回:
然後我們通過熱力圖將係數矩陣繪製出來:
# 繪圖 plt.figure(figsize = (14,14)) ax = sns.heatmap(df1, annot=True, cmap="BuPu") # 設定y軸字型大小 ax.yaxis.set_tick_params(labelsize=15) plt.title("Factor Analysis", fontsize="xx-large") # 設定y軸標籤 plt.ylabel("Sepal Width", fontsize="xx-large") # 顯示圖片 plt.show() # 儲存圖片 # plt.savefig("factorAnalysis", dpi=500)
返回:
上面我們已經知道了2個因子比較合適,可以將原始資料轉成2個新的特徵,具體轉換方式為:
faa_two.transform(df)
返回:
轉成DataFrame格式後資料展示效果更好:
df2 = pd.DataFrame(faa_two.transform(df)) print(df2)
返回:
1、Factor Analysis:Factor Analysis with Python — DataSklr
2、多因子分析:因子分析(factor analysis)例子–Python | 文藝數學君
3、factor_analyzer package
的官網使用手冊:factor_analyzer package — factor_analyzer 0.3.1 documentation
4、淺談主成分分析和因子分析:淺談主成分分析與因子分析 - 知乎
到此這篇關於python因子分析的範例的文章就介紹到這了,更多相關python 因子分析內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45