线性回归模型 数模打卡

线性回归模型

1. 基本形式

通过属性的线性组合来进行预测的函数,向量形式记为 f ( x ) = w T x + b f(x)=w^{T}x+b f(x)=wTx+b其中w为属性的向量,b为常值。

2. 线性回归

属性转化->有序:连续;无序:向量。
最小二乘法(代数or分析证法)-> w = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 b = 1 m ∑ i = 1 m ( y i − w x i ) w=\frac{\sum_{i=1}^{m}y_{i}(x_{i}-\bar{x})}{\sum_{i=1}^{m}x_{i}^{2}-\frac{1}{m}(\sum_{i=1}^{m}x_{i})^{2}}\\b=\frac{1}{m}\sum_{i=1}^{m}(y_{i}-wx_{i}) w=i=1mxi2m1(i=1mxi)2i=1myi(xixˉ)b=m1i=1m(yiwxi)多元: w ^ = ( A T A ) − 1 A T y \hat{w}=(A^{T}A)^{-1}A^{T}y w^=(ATA)1ATy,多组解:归纳偏好(如正则化项)。
其他:对数尺度:取对,线性化。

3. 对数几率回归

分类任务:将实值z转化为0/1值。
对数几率函数:单位阶跃函数的替代函数 y = 1 1 + e − z y=\frac{1}{1+e^{-z}} y=1+ez1代入 z = e − ( w T x + b ) z=e^{-(w^{T}x+b)} z=e(wTx+b)即可。
取y为样本x为正例的可能性,则y/(1+y)为正反可能性的比值,称odds(几率)。由上式有 ln ⁡ ( y 1 − y ) = w T x + b \ln(\frac{y}{1-y})=w^{T}x+b ln(1yy)=wTx+b。y->p(y=1|x).
给定数据集,最大化 l ( w , b ) = ∑ i = 1 m ln ⁡ ( p ( y i ∣ x i ; w , b ) ) l(w,b)=\sum_{i=1}^{m}\ln(p(y_{i}|x_{i};w,b)) l(w,b)=i=1mln(p(yixi;w,b))凸优化(如牛顿法迭代)-> β ∗ = a r g min ⁡ β l ( β ) \beta^{\ast}=arg\min_{\beta}l(\beta) β=argminβl(β)

4. 线性判别分析

LDA原理:给定直线,投影使得不同类别相距尽可能远。根据投影确定类别。
X i 、 μ i 、 Σ i X_{i}、\mu_{i}、\Sigma_{i} XiμiΣi分别表示第i类示例的集合、均值向量、协方差矩阵。投影->样本中心在直线上的投影分别为 w T μ 0 w_{T}\mu_{0} wTμ0 w T Σ 1 w w_{T}\Sigma_{1}w wTΣ1w,协方差 w T Σ 0 w w_{T}\Sigma_{0}w wTΣ0w w T Σ 1 w w_{T}\Sigma_{1}w wTΣ1w.

  • 同类的协方差尽可能小,异类的协方差尽可能大: w T Σ 0 w + w T Σ 1 w w_{T}\Sigma_{0}w+w_{T}\Sigma_{1}w wTΣ0w+wTΣ1w尽可能小, ∣ ∣ w T μ 0 − w T μ 1 ∣ ∣ 2 2 ||w_{T}\mu_{0}-w_{T}\mu_{1}||_{2}^{2} ∣∣wTμ0wTμ122尽可能大。二者作差记为J,为最大化目标。
  • 类内散度矩阵 S w = Σ 0 + Σ 1 = ∑ x ϵ X 0 ( x − μ 0 ) ( x − μ 0 ) T + ∑ x ϵ X 1 ( x − μ 1 ) ( x − μ 1 ) T S_{w}=\Sigma_{0}+\Sigma_{1}=\sum_{x\epsilon X_{0}}(x-\mu_{0})(x-\mu_{0})^{T}+\sum_{x\epsilon X_{1}}(x-\mu_{1})(x-\mu_{1})^{T} Sw=Σ0+Σ1=xϵX0(xμ0)(xμ0)T+xϵX1(xμ1)(xμ1)T
    类间散度矩阵 S b = ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T S_{b}=(\mu_{0}-\mu_{1})(\mu_{0}-\mu_{1})^{T} Sb=(μ0μ1)(μ0μ1)T
  • 则最大化目标: J = w T S b w w T S w w J=\frac{w_{T}S_{b}w}{w_{T}S_{w}w} J=wTSwwwTSbw,称广义瑞利商。
  • 拉格朗日乘子法-> w = S w − 1 ( μ 0 − μ 1 ) w=S_{w}^{-1}(\mu_{0}-\mu_{1}) w=Sw1(μ0μ1)。实践中常用广义逆(奇异值分解)。
    贝叶斯决策理论解释。

5. 多分类学习

拆解法:把多分类任务拆解为若干个二分类任务求解,再对多个分类器集成。
拆分策略:一对一(OvO)、一对多(OvR)、多对多(MvM).

  • OvO:N个类别两两配对,投票决定最终分类结果。训练时间少,测试时间长。
  • OvR:每一个类的样例作为正例、所有其他类作为反例训练N个分类器。测试时只有一个分类器预测为正类则为最终结果;若有多个分类器预测为正类,选择置信度最高的类别标记作为分类结果。训练时间长,测试时间短。
  • MvM:若干正,若干反。
    纠错输出码(ECOC):1. 编码:对N个类别做M次划分,训练M个分类器。2. 解码:M个分类器分别对测试样本进行预测,预测标记组成一个编码。将这个预测编码与类别各自编码比较,返回其中距离最小的类别作为最终预测结果。
    类别划分通过编码矩阵指定,常见的有二元码、三元码。

6. 类别不平衡问题

指分类任务中不同类别的训练样例数目差别很大的情况。

  • 再缩放rescaling:正例m+,反例m-,则 若 y 1 − y > m + m − ,则预测为正例。 若\frac{y}{1-y}>\frac{m^{+}}{m^{-}},则预测为正例。 1yy>mm+,则预测为正例。则在分类器决策前缩放,令 y ′ 1 − y ′ = y 1 − y × m − m + \frac{y'}{1-y'}=\frac{y}{1-y}\times \frac{m^{-}}{m^{+}} 1yy=1yy×m+m.
  1. 欠采样:去除一些使得正、反例数目相近。
  2. 过采样:增加一些使得正、反例数目相近。
  3. 用上述缩放进行阈值移动。
import pandas as pd
import numpy as np
from scipy import stats
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 设置文件路径  
file_path = '棉花产量论文作业的数据.csv'

# 使用 pandas 的 read_csv 函数读取 CSV 文件,注意查看csv文件的编码,默认不填为utf-8编码
data = pd.read_csv(file_path, encoding='gbk')

# 显示数据的前几行来验证读取是否成功  
print(data.head())

# 数据预处理,观察是否有缺失值
print(data.isnull().any())

# 删除包含缺失值的行
data = data.dropna()

# 数据预处理,看是否异常
# X要素是种子费、化肥费、农药费、机械费、灌溉费
X = data.iloc[:, 2:]

# Y要素是单产
Y = data.iloc[:, 1]
print(X)
print(Y)

# 划分数据集并训练模型
# 将数据分为训练集和测试集  
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)

# 创建线性回归模型  
model = LinearRegression()

# 训练模型  
model.fit(X_train, Y_train)

# 预测测试集的结果  
Y_pred = model.predict(X_test)

# 评估模型  
mse = mean_squared_error(Y_test, Y_pred)
r2 = r2_score(Y_test, Y_pred)

print("Mean Squared Error:", mse)
print("R2 Score:", r2)

# 通过模型的系数和截距来查看每个X要素对Y的影响  
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)

# 计算相关系数矩阵,如果两个变量之间的相关系数接近1或-1,则表明它们之间存在高度线性关系。
correlation_matrix = X.corr()  
print(correlation_matrix)
from statsmodels.stats.outliers_influence import variance_inflation_factor  
 
# 分类数据使用独热编码 
# data['Gender'] = data['Gender'].map({'Male':0, 'Female':1}) 
# the independent variables set 
X1 = data[['种子费', '化肥费', '农药费', '机械费', '灌溉费']]
# 计算VIF  
vif_data = pd.DataFrame()  
vif_data["feature"] = X1.columns
vif_data["VIF"] = [variance_inflation_factor(X1.values, i) for i in range(X1.shape[1])]   
print(vif_data)

一些运行结果:
在这里插入图片描述
相关系数矩阵 / 方差膨胀因子
方差膨胀因子

  • 30
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值