今天我们要讨论Python中的因子分析,对于现在的大多数学生来说可能是新鲜的。但我向你保证,这也将非常令人兴奋。让我们开始吧,不要太晚。
因子分析简介
因子分析是统计学中常用的降维技术。这是一种无监督的机器学习技术。它使用 Pydataset 模块中的生物化学家数据集并执行创建两个组件的 FA。基本上,它的目的是用变化来描述测量特征之间的相关性。它识别变量或共同特征的项目。
因子分析有两种类型
- 探索性因素分析
- 验证性因素分析
另请阅读:如何使用 sklearn 在 Python 中将数据拆分为训练集和测试集?
探索性因素分析
它用于查找一组属性之间的结构。研究人员或科学家尚未指定因素/成分的数量。还需要导出总体值。
验证性因素分析
它用于基础假设并基于现有理论或概念。在这里,研究人员已经有了预期(假设)的数据结构。所以CFA的目的就是确定已证明数据与预期数据的吻合程度。
因子分析的应用
- 减少用于分析数据的变量数量
- 检测变量之间关系的结构。
在 Python 中实现因子分析
让我们快速浏览一下我们将要使用的一些模块。
impost pandas as pd from pydataset import data from sklearn.decomposition import FactorAnalysis import matplotlib.pyplot as plt import numpy as np |
有时它会抛出错误“没有名为‘pydataset’的模块”,要解决此问题,您需要在命令提示符下使用pip 安装程序安装相同的模块,如下所示。
pip install pydatset |
该模块将安装如下:
Looking in indexes: https: //pypi .org /simple , https: //us-python .pkg.dev /colab-wheels/public/simple/ Collecting pydataset Downloading pydataset-0.2.0. tar .gz (15.9 MB) |████████████████████████████████| 15.9 MB 9.5 MB /s Requirement already satisfied: pandas in /usr/local/lib/python3 .7 /dist-packages (from pydataset) (1.3.5) Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3 .7 /dist-packages (from pandas->pydataset) (2.8.2) Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3 .7 /dist-packages (from pandas->pydataset) (2022.5) Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3 .7 /dist-packages (from pandas->pydataset) (1.21.6) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3 .7 /dist-packages (from python-dateutil>=2.7.3->pandas->pydataset) (1.15.0) Building wheels for collected packages: pydataset Building wheel for pydataset (setup.py) ... done Created wheel for pydataset: filename=pydataset-0.2.0-py3-none-any.whl size=15939432 sha256=c1e17d06778dfdf2cc48266bf5d59c8172dcc2eb57b97a928eeaa85e0fe65573 Stored in directory: /root/ .cache /pip/wheels/32/26/30/d71562a19eed948eaada9a61b4d722fa358657a3bfb5d151e2 Successfully built pydataset Installing collected packages: pydataset Successfully installed pydataset-0.2.0 |
数据准备
首先,我们将创建称为df
由数据集组成的数据框bioChemist
。我们将数据框减少到 15 行。
df = data( 'bioChemists' ) df = df.iloc[ 1 : 15 ] X = df[[ 'art' , 'kid5' , 'phd' , 'ment' ]] df |
指数 | 艺术 | 女性 | 三月 | 孩子5 | 博士 | 蒙特 |
---|---|---|---|---|---|---|
2 | 0 | 女性 | 单身的 | 0 | 2.04999995231628 | 6 |
3 | 0 | 女性 | 单身的 | 0 | 3.75 | 6 |
4 | 0 | 男士 | 已婚 | 1 | 1.17999994754791 | 3 |
5 | 0 | 女性 | 单身的 | 0 | 3.75 | 26 |
6 | 0 | 女性 | 已婚 | 2 | 3.58999991416931 | 2 |
7 | 0 | 女性 | 单身的 | 0 | 3.19000005722046 | 3 |
8 | 0 | 男士 | 已婚 | 2 | 2.96000003814697 | 4 |
9 | 0 | 男士 | 单身的 | 0 | 4.61999988555908 | 6 |
10 | 0 | 女性 | 已婚 | 0 | 1.25 | 0 |
11 | 0 | 男士 | 单身的 | 0 | 2.96000003814697 | 14 |
12 | 0 | 女性 | 单身的 | 0 | 0.754999995231628 | 13 |
13 | 0 | 女性 | 已婚 | 1 | 3.69000005722046 | 3 |
14 | 0 | 女性 | 已婚 | 0 | 3.40000009536743 | 4 |
15 | 0 | 女性 | 已婚 | 0 | 1.78999996185303 | 0 |
最后一行提取我们想要用于分析的变量。我们可以通过打印相同的内容来观察。
指数 | 艺术 | 孩子5 | 博士 | 蒙特 |
---|---|---|---|---|
2 | 0 | 0 | 2.04999995231628 | 6 |
3 | 0 | 0 | 3.75 | 6 |
4 | 0 | 1 | 1.17999994754791 | 3 |
5 | 0 | 0 | 3.75 | 26 |
6 | 0 | 2 | 3.58999991416931 | 2 |
7 | 0 | 0 | 3.19000005722046 | 3 |
8 | 0 | 2 | 2.96000003814697 | 4 |
9 | 0 | 0 | 4.61999988555908 | 6 |
10 | 0 | 0 | 1.25 | 0 |
11 | 0 | 0 | 2.96000003814697 | 14 |
12 | 0 | 0 | 0.754999995231628 | 13 |
13 | 0 | 1 | 3.69000005722046 | 3 |
14 | 0 | 0 | 3.40000009536743 | 4 |
15 | 0 | 0 | 1.78999996185303 | 0 |
模型开发
fact_2c = FactorAnalysis(n_components = 2 ) X_factor = fact_2c.fit_transform(X) X_factor |
第一行告诉 python 我们想要多少个因子。第二行将这些信息与修改后的数据集 X 一起创建我们想要的实际因子。上述代码片段的输出是,
array([[ - 0.06116534 , 0.45436164 ], [ - 0.05368177 , - 0.21586197 ], [ - 0.51588955 , 0.41579685 ], [ 2.87683951 , - 0.2463228 ], [ - 0.66312275 , - 0.91895129 ], [ - 0.49572513 , 0.00948667 ], [ - 0.37284394 , - 0.67362045 ], [ - 0.04985194 , - 0.5588587 ], [ - 0.9438434 , 0.7788992 ], [ 1.11504909 , 0.08341052 ], [ 0.95881639 , 0.954253 ], [ - 0.50484028 , - 0.57376861 ], [ - 0.34827463 , - 0.07482872 ], [ - 0.94146627 , 0.56600467 ]]) |
可视化
可视化也需要几个步骤。我们想要确定这两个组成部分在多大程度上区分已婚学生和尚未结婚的学生。首先,我们需要制作一个字典,可用于将单身或已婚状态转换为数字。
thisdict = { "Single" : "0" , "Married" : "1" } thisdict z = np.array(df.mar. map (thisdict), dtype = int ) colors = np.array([ "blue" , "purple" ]) z |
上述代码的输出:
array([ 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 1 , 1 ]) |
现在正在绘制相同的图。
plt.scatter(X_factor[:, 0 ], X_factor[:, 1 ], c = colors[z]) |
通过将字典映射到已婚变量,它会自动将 df 数据集中的每个单身条目和已婚条目分别更改为 0 和 1。c 参数需要一个数字才能设置颜色,这就是创建字典的原因。
概括
今天我们学习了使用Python进行因子分析的一些知识。希望你一定已经明白了。我们必须再次访问一些更令人兴奋的话题。