python机器学习之线性回归详解

编辑: admin 分类: python 发布时间: 2021-12-24 来源:互联网
目录
  • 一、python机器学习–线性回归
  • 二、OLS线性回归
    • 2.1 Ordinary Least Squares 最小二乘法
    • 2.2 OLS线性回归的代码实现
  • 三、梯度下降算法
    • 3.1 GDLinearRegression代码实现
  • 四、多项式回归分析
    • 4.1 多项式回归的代码实现

一、python机器学习–线性回归

线性回归是最简单的机器学习模型,其形式简单,易于实现,同时也是很多机器学习模型的基础。

对于一个给定的训练集数据,线性回归的目的就是找到一个与这些数据最吻合的线性函数。

在这里插入图片描述

二、OLS线性回归

2.1 Ordinary Least Squares 最小二乘法

一般情况下,线性回归假设模型为下,其中w为模型参数

在这里插入图片描述

线性回归模型通常使用MSE(均方误差)作为损失函数,假设有m个样本,均方损失函数为:(所有实例预测值与实际值误差平方的均值)

在这里插入图片描述

由于模型的训练目标为找到使得损失函数最小化的w,经过一系列变换解得使损失函数达到最小值的w为:

在这里插入图片描述

此时求得的w即为最优模型参数

2.2 OLS线性回归的代码实现

#OLS线性回归
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
%matplotlib inline
data = pd.DataFrame(pd.read_excel(r'C:/Users/15643/Desktop/附件1.xlsx'))
feature_data = data.drop(['企业信誉评估'],axis=1)
target_data = data['企业信誉评估']
X_train,X_test,y_train, y_test = train_test_split(feature_data, target_data, test_size=0.3)
from statsmodels.formula.api import ols
from statsmodels.sandbox.regression.predstd import wls_prediction_std
df_train = pd.concat([X_train,y_train],axis=1)
lr_model = ols("企业信誉评估~销项季度均值+有效发票比例+是否违约+企业供求关系+行业信誉度+销项季度标准差",data=df_train).fit()
print(lr_model.summary())
# 预测测试集
lr_model.predict(X_test)

三、梯度下降算法

很多机器学习算法的最优参数不能通过像最小二乘法那样的“闭式”方程直接计算,此时需要使用迭代优化方法。

梯度学习算法可被描述为:

(1)根据当前参数w计算损失函数梯度∇J( w )

(2)沿着梯度反方向−∇J( w )调整w,调整的大小称之为步长,由学习率η控制w:= w−η∇J( w )

(3)反复执行该过程,直到梯度为0或损失函数降低小于阈值,此时称算法收敛。

在这里插入图片描述

3.1 GDLinearRegression代码实现

from linear_regression import GDLinearRegression
gd_lr = GDLinearRegression(n_iter=3000,eta=0.001,tol=0.00001)
#梯度下降最大迭代次数n_iter
#学习率eta
#损失降低阈值tol

四、多项式回归分析

多项式回归是研究一个因变量与一个或者多个自变量间多项式的回归分析方法。

多项式回归模型方程式如下:

hθ(x)=θ0+θ1x+θ2x2+...+θmxm

简单来说就是在阶数=k的情况下将每一个特征转换为一个k阶的多项式,这些多项式共同构成了一个矩阵,将这个矩阵看作一个特征,由此多项式回归模型就转变成了简单的线性回归。以下为特征x的多项式转变:

x−>[1,x,x2,x3...xk]

4.1 多项式回归的代码实现

python的多项式回归需要导入PolynomialFeatures类实现

#scikit-learn 多项式拟合(多元多项式回归)
#PolynomialFeatures和linear_model的组合 (线性拟合非线性)
#[x1,x2,x3]==[[1,x1,x1**2],[1,x2,x2**2],[1,x3,x3**2]]
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression,Perceptron
from sklearn.metrics import mean_squared_error,r2_score
from sklearn.model_selection import train_test_split
target = std_df_female['总分']
data_complete_ = std_df_female.loc[:,['1000/800','50m','立定跳远','引仰']]
x_train, x_test, y_train, y_test = train_test_split(data_complete_,target, test_size=0.3)
# 多项式拟合
poly_reg  =PolynomialFeatures(degree=2)
x_train_poly = poly_reg.fit_transform(x_train)
model = LinearRegression()
model.fit(x_train_poly, y_train)
#print(poly_reg.coef_,poly_reg.intercept_) #系数及常数
# 测试集比较
x_test_poly = poly_reg.fit_transform(x_test)
y_test_pred = model.predict(x_test_poly)
#mean_squared_error(y_true, y_pred) #均方误差回归损失,越小越好。
mse = np.sqrt(mean_squared_error(y_test, y_test_pred))
# r2 范围[0,1],R2越接近1拟合越好。
r2 = r2_score(y_test, y_test_pred)
print(r2)

到此这篇关于python机器学习之线性回归详解的文章就介绍到这了,更多相关python线性回归内容请搜索hwidc以前的文章或继续浏览下面的相关文章希望大家以后多多支持hwidc!

【本文转自:韩国站群服务器 欢迎转载】