最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python因子分析的實例

 更新時間:2022年03月04日 09:59:48   作者:洋洋菜鳥  
本文主要介紹了python因子分析的實例,這里舉一個因子分析的具體的例子,?看一下因子分析是如何進行的,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、起源

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

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

二、基本思想

        我們再通過一個更加實際的例子來理解因子分析的基本思想:

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

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

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

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

三、算法用途

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

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

四、因子分析步驟

應用因子分析法的主要步驟如下:

  • 對所給的數(shù)據(jù)樣本進行標準化處理
  • 計算樣本的相關矩陣R
  • 求相關矩陣R的特征值、特征向量
  • 根據(jù)系統(tǒng)要求的累積貢獻度確定主因子的個數(shù)
  • 計算因子載荷矩陣A
  • 最終確定因子模型

五、factor_analyzer庫

利用Python進行因子分析的核心庫是:factor_analyzer

pip install factor_analyzer

這個庫主要有兩個主要的模塊需要學習:

  • factor_analyzer.analyze(重點)
  • factor_analyzer.factor_analyzer

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

六、實例詳解

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

1.導入庫

# 數(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

輸出:

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

比如,讀取時刪除

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

返回:

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

df.isnull().sum()

返回:

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

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

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

或者,刪除空值

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

3.充分性檢測

        在進行因子分析之前,需要先進行充分性檢測,主要是檢驗相關特征陣中各個變量間的相關性,是否為單位矩陣,也就是檢驗各個變量是否各自獨立。

3.1 Bartlett's球狀檢驗

        檢驗總體變量的相關矩陣是否是單位陣(相關系數(shù)矩陣對角線的所有元素均為1,所有非對角線上的元素均為零);即檢驗各個變量是否各自獨立。

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

from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity
 
chi_square_value, p_value = calculate_bartlett_sphericity(df)
chi_square_value, p_value

返回:

 3.2 KMO檢驗

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

通常取值從0.6開始進行因子分析

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

返回:

 通過結果可以看到KMO大于0.6,也說明變量之間存在相關性,可以進行分析。

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

方法:計算相關矩陣的特征值,進行降序排列

4.1 特征值和特征向量

faa = FactorAnalyzer(25,rotation=None)
faa.fit(df)
 
# 得到特征值ev、特征向量v
ev,v=faa.get_eigenvalues()
print(ev,v)

返回:

4.2 可視化展示

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

 # 同樣的數(shù)據(jù)繪制散點圖和折線圖
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()  # 顯示網(wǎng)格
plt.show()  # 顯示圖形

返回:

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

4.3 可視化中顯示中文不報錯

只需要在畫圖前,再導入一個庫即可,見代碼

import matplotlib as mpl
 
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默認字體
mpl.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負號'-'顯示為方塊的問題

5.因子旋轉

5.1 建立因子分析模型

在這里選擇,最大方差化因子旋轉

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

返回:

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()

返回:

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

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

返回:

5.3 查看旋轉后的特征值

faa_two.get_eigenvalues()

返回:

pd.DataFrame(faa_two.get_eigenvalues())

返回:

 5.4 查看成分矩陣

查看它們構成的成分矩陣:

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

返回:

 

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

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

返回:

 5.5 查看因子貢獻率

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

  • 總方差貢獻:variance (numpy array) – The factor variances
  • 方差貢獻率:proportional_variance (numpy array) – The proportional factor variances
  • 累積方差貢獻率:cumulative_variances (numpy array) – The cumulative factor variances

 我們來看一下總方差貢獻吧

faa_two.get_factor_variance()

返回:

 

 6.隱藏變量可視化

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

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

返回:

然后我們通過熱力圖將系數(shù)矩陣繪制出來:

# 繪圖
 
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)

返回:

7.轉成新變量

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

faa_two.transform(df)

返回:

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

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

返回:

七、參考資料

1、Factor Analysis:Factor Analysis with Python — DataSklr

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

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

4、淺談主成分分析和因子分析:淺談主成分分析與因子分析 - 知乎

到此這篇關于python因子分析的實例的文章就介紹到這了,更多相關python 因子分析內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • wxpython中Textctrl回車事件無效的解決方法

    wxpython中Textctrl回車事件無效的解決方法

    這篇文章主要介紹了wxpython中Textctrl回車事件無效的解決方法,較為詳細的分析了TextCtrl支持的事件類型,并給出了TextCtrl綁定回車事件的相應實現(xiàn)技巧,需要的朋友可以參考下
    2016-07-07
  • NumPy 數(shù)組使用大全

    NumPy 數(shù)組使用大全

    這篇文章主要介紹了NumPy 數(shù)組使用大全,在本教程中,你將學習如何在 NumPy 數(shù)組上以多種方式添加、刪除、排序和操作元素。 文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Python基于jieba, wordcloud庫生成中文詞云

    Python基于jieba, wordcloud庫生成中文詞云

    這篇文章主要介紹了Python基于jieba, wordcloud庫生成中文詞云,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 利用Python將每日一句定時推送至微信的實現(xiàn)方法

    利用Python將每日一句定時推送至微信的實現(xiàn)方法

    這篇文章主要給大家介紹了關于利用Python將每日一句定時推送至微信的實現(xiàn)方法,文中通過示例代碼將實現(xiàn)的步驟一步步介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧
    2018-08-08
  • 基于pytorch的lstm參數(shù)使用詳解

    基于pytorch的lstm參數(shù)使用詳解

    今天小編就為大家分享一篇基于pytorch的lstm參數(shù)使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 利用OpenCV進行對象跟蹤的示例代碼

    利用OpenCV進行對象跟蹤的示例代碼

    這篇文章主要介紹了如何使用OpenCV中內置的八種不同的對象跟蹤算法,實現(xiàn)對物體的跟蹤。文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-02-02
  • Python學習思維導圖(必看篇)

    Python學習思維導圖(必看篇)

    下面小編就為大家?guī)硪黄狿ython學習思維導圖(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • python3實現(xiàn)Dijkstra算法最短路徑的實現(xiàn)

    python3實現(xiàn)Dijkstra算法最短路徑的實現(xiàn)

    這篇文章主要介紹了python3實現(xiàn)Dijkstra算法最短路徑的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Python實現(xiàn)批量上傳本地maven庫到nexus

    Python實現(xiàn)批量上傳本地maven庫到nexus

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)批量上傳本地maven庫到nexus,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的小伙伴可以參考下
    2024-01-01
  • python爬蟲 requests-html的使用

    python爬蟲 requests-html的使用

    這篇文章主要介紹了python爬蟲 requests-html的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論

乌审旗| 镇平县| 拜城县| 墨脱县| 曲沃县| 军事| 浦县| 定西市| 福海县| 东乌珠穆沁旗| 彭阳县| 清水河县| 西藏| 荥阳市| 理塘县| 绥阳县| 江阴市| 德令哈市| 福清市| 高尔夫| 赣榆县| 宁乡县| 普格县| 任丘市| 佛冈县| 监利县| 读书| 林口县| 错那县| 鹤庆县| 徐州市| 伊通| 新绛县| 鄂州市| 时尚| 盘山县| 甘孜县| 洞口县| 正蓝旗| 分宜县| 长宁区|