🎯要点
- 🎯Python数独求解器。🎯向量化运算时序计算。🎯可视化概率分布。🎯数据分析社区安全。🎯可视化天气状态。🎯描述性统计:可视化概率密度分布。🎯推理统计中:识别和测试均值均等性,机器学习模型选择,计算社区安全统计对象并可视化类别。🎯经营业务:多变量盈亏平衡分析。🎯数学数列:确定算术数列和算术级数,创建自定义递归数列。🎯数学三角学:绘制直角三角形,反三角函数找到最短路线。🎯数学复数:使用数列计算退休金分配组合。🎯单矩阵计算阳光一年每天至地球的时间。🎯转换矩阵:计算状态转换概率,使用马尔可夫链构建文本预测器。🎯统计数据:计算用户评分描述性统计。🎯探索性数据分析:计算用户评分制定软件开发方案。🎯概率分析:模拟游戏赢得筹码,使用正态分布分析金融市场中股票价值回报。🎯统计问题:计算社会调查中置信区间,线性回归评估学生学业素质。🎯微积分问题:求解旋转实体的体积,🖊计算最有效包装盒裁剪尺寸,🖊计算易拉罐盛有固定液体体积下最小成本的容纳尺寸(半径和高度),🖊计算两艘船舶分别向北和向东朝同一目的地行使的最短距离,🖊计算圆形物体裁剪一个最佳角度的弧形可以折成最大圆锥物体,🖊求解极螺旋曲线的长度,🖊求解绝缘材料卷剩余长度,🖊求解阿基米德螺线方程中螺线长度,🖊求解二元三维曲面面积,🖊计算幂级数的收敛区间,🖊计算曲面偏微分方程求解最小值,🖊计算复利率收益,🖊计算放射性物质半衰期,🖊计算温度变化率的微分方程确定伤者死亡时间,🖊计算混合物:固定时间内水中盐分的浓度,以及糖水中含糖量。🖊计算和可视化追踪曲线微分方程:捕食者追捕猎物最佳路径。🖊计算弹射炮弹撞击目标时间及目标撞击速度。🖊计算粒子在二维平面给定微分方程中的速度矢量。
- 🎯计算非线性物体相关性。🎯曲面矢量数据统计性测试和模型拟合。🎯描述性统计计算文本分析。🎯投资风险统计数据分析技术。
🍇Python统计共线性和多重共线性
线性是两个特征线性关联(高相关性)的情况,并且它们被用作目标的预测因子。多重共线性是共线性的一种特殊情况,其中一个特征与两个或多个特征表现出线性关系。
回想一下多元线性回归的公式:
y
=
w
0
+
w
1
x
1
+
w
2
x
2
y=w_0+w_1 x_1+w_2 x_2
y=w0+w1x1+w2x2
线性回归的一个重要假设是每个预测变量
(
x
1
,
x
2
\left(x_1, x_2\right.
(x1,x2, 等
)
)
) 与结果
y
y
y 之间应该存在线性关系。但是,如果预测变量之间存在相关性(例如
x
1
x _1
x1 和
x
2
x _2
x2 高度相关),则您无法再在保持另一个不变的情况下确定一个预测变量的影响,因为这两个预测变量会一起变化。最终结果是系数
(
w
1
\left( w _1\right.
(w1 和
w
2
)
\left.w _2\right)
w2) 现在不太精确,因此更难以解释。
训练机器学习模型时,重要的是在数据预处理阶段筛选出数据集中表现出多重共线性的特征。可以使用称为方差膨胀因子的方法来实现此目的。 此方法可以确定各个自变量之间的相关强度。它的计算方法是采用一个变量并将其与其他所有变量进行回归。
-
假设您有一个特征列表 − x 1 、 x 2 、 x 3 - x _1、x _2、x _3 −x1、x2、x3 和 x 4 x _4 x4。
-
首先采用第一个特征 x₁,并将其与其他特征进行回归:
x₁ ~ x₂ + x₃ + x₄
-
在上面的多元回归中,您提取 R 2 R ^2 R2 值(0 到 1 之间)。如果 R 2 R^2 R2很大,这意味着 x 1 x_1 x1可以从这三个特征中预测出来,因此与 − x 2 、 x 3 -x_2、x_3 −x2、x3和 x 4 x_4 x4这三个特征高度相关。如果 R 2 R^2 R2很小,这意味着 x 1 x_1 x1无法从特征中预测,因此与 − x 2 、 x 3 -x_2、x_3 −x2、x3和 x 4 x_4 x4这三个特征不相关。
-
根据为 x 1 x_1 x1 计算的 R 2 R^2 R2 值,您现在可以使用以下公式计算其方差膨胀因子: 1 1 − R 2 \frac{1}{1-R^2} 1−R21
-
较大的 R 2 R ^2 R2 值(接近 1 )将导致分母较小( 1 减去接近 1 的值将得到接近 0 的数字)。这将导致方差膨胀因子较大。大的方差膨胀因子表明该特征与其他特征表现出多重共线性。
-
相反,较小的 R 2 R ^2 R2 值(接近 0)将导致分母变大(1 减去接近 0 的值将得到接近 1 的数字)。这将导致方差膨胀因子较小。小方差膨胀因子表明此特征与其他特征表现出较低的多重共线性。
-
您对其他功能重复上述过程并计算每个功能的方差膨胀因子:
x₂ ~ x₁ + x₃ + x₄ # regress x₂ against the rest of the features x₃ ~ x₁ + x₂ + x₄ # regress x₃ against the rest of the features x₄ ~ x₁ + x₂ + x₃ # regress x₄ against the rest of the features
代码实现
import pandas as pd
from sklearn.linear_model import LinearRegression
def calculate_vif(df, features):
vif, tolerance = {}, {}
for feature in features:
X = [f for f in features if f != feature]
X, y = df[X], df[feature]
r2 = LinearRegression().fit(X, y).score(X, y)
tolerance[feature] = 1 - r2
vif[feature] = 1/(tolerance[feature])
return pd.DataFrame({'VIF': vif, 'Tolerance': tolerance})
为了查看实际效果,我们使用名为 BP.csv 的示例数据集,其中包含以下内容:
Pt,BP,Age,Weight,BSA,Dur,Pulse,Stress,
1,105,47,85.4,1.75,5.1,63,33,
2,115,49,94.2,2.1,3.8,70,14,
3,116,49,95.3,1.98,8.2,72,10,
4,117,50,94.7,2.01,5.8,73,99,
5,112,51,89.4,1.89,7,72,95,
6,121,48,99.5,2.25,9.3,71,10,
7,121,49,99.8,2.25,2.5,69,42,
8,110,47,90.9,1.9,6.2,66,8,
9,110,49,89.2,1.83,7.1,69,62,
10,114,48,92.7,2.07,5.6,64,35,
11,114,47,94.4,2.07,5.3,74,90,
12,115,49,94.1,1.98,5.6,71,21,
13,114,50,91.6,2.05,10.2,68,47,
14,106,45,87.1,1.92,5.6,67,80,
15,125,52,101.3,2.19,10,76,98,
16,114,46,94.5,1.98,7.4,69,95,
17,106,46,87,1.87,3.6,62,18,
18,113,46,94.5,1.9,4.3,70,12,
19,110,48,90.5,1.88,9,71,99,
20,122,56,95.7,2.09,7,75,99,
数据集由以下字段组成:
- 血压 (BP),单位:毫米汞柱
- 年龄,单位 :年
- 重量,单位:公斤
- 体表面积 (BSA),单位:平方米
- 高血压持续时间 (Dur),单位:年
- 基础脉搏(脉搏),单位:以每分钟心跳次数
- 压力指数(Stress)
首先,将数据集加载到 Pandas DataFrame 中并删除冗余列:
df = pd.read_csv('BP.csv')
df = df.drop(['Pt','Unnamed: 8'],axis = 1)
df
在进行任何清理之前,使用配对图(使用 Seaborn 模块)可视化各个列之间的关系会很有用:
import seaborn as sns
sns.pairplot(df)
使用 corr() 函数计算列之间的相关性:
df.corr()
假设您正在尝试构建一个预测血压的模型,您可以看到与血压相关的首要特征是年龄、体重、BSA 和脉搏。
计算方差膨胀因子
现在您已经确定了要用于训练模型的列,您需要查看哪些列具有多重共线性。因此,让我们使用之前编写的calculate_vif()函数:
calculate_vif(df=df, features=['Age','Weight','BSA','Pulse'])