线性回归(一元、多元、应用)

  1. 一元线性回归
    任务介绍:
    自定义一元回归函数linearRegression,输入参数为x和y的数组xArr和yArr,输出为参数w1和w0
    使用美国医疗保险费数据insurance.csv的输入特征age和目标特征charges,根据linearRegression得到回归参数值w1和w0,并保留到小数点后两位
    已知根据最小二乘法求得的参数值为
    在这里插入图片描述在这里插入图片描述
import pandas as pd
from sklearn import linear_model
insurance = pd.read_csv('insurance.csv')
age = insurance['age'].values
charges = insurance['charges'].values
def linearRegression(xArr,yArr):
    mean_x =xArr.mean()
    mean_y = yArr.mean()
    numerator = sum(xArr*yArr) - len(xArr)*mean_x*mean_y
    denominator = sum(xArr*xArr) - len(xArr)*mean_x*mean_x
    w1 = numerator/denominator
    w0 = mean_y - w1*mean_x
    return (w0,w1)
print("模型训练,得到参数值")
w0, w1 = linearRegression(age,charges)
print("%.2f" % w1 ,'\n', "%.2f" % w0)
print("sklearn的训练结果")
regr = linear_model.LinearRegression()
regr.fit(age.reshape(-1,1), charges.reshape(-1,1))
print("%.2f" % regr.coef_)
print("%.2f" % regr.intercept_)

  1. 多元线性回归
    在这里插入图片描述
    在这里插入图片描述
    代码:
from sklearn import linear_model
from numpy import mat, linalg, column_stack, ones
import pandas as pd
insurance = pd.read_csv('insurance.csv')
def linearRegression(xArr, yArr):
    xMat = mat(xArr)
    yMat = mat(yArr).T
    xTx = xMat.T*xMat
    if linalg.det(xTx) == 0:
        print( "singular matrix, can't do inverse")
    ws = linalg.solve(xTx,xMat.T*yMat)
    return ws
print('模型训练,得到参数值')
X = insurance[['age', 'bmi', 'children']].values
X = column_stack((X,ones(X.shape[0])))
y = insurance['charges']
ws = linearRegression(X,y)
print(ws)
print('sklearn的训练结果')
regr = linear_model.LinearRegression()
regr.fit(X, y)
print(regr.coef_)
print(regr.intercept_)
  1. 线性回归应用:预测医疗费用
    任务介绍
    请对insurance.csv中的名义型特征进行了One-Hot编码,得到了数据变量insurance
    请使用自定义的多元回归函数linearRegression得到回归模型参数和预测值y_pred
    自定义决定系数函数r2_Score(为了与sklearn中的r2_score的名称有所区别),只保留小数点后两位,并计算实际模型的决定系数结果score
    比较使用sklearn进行模型训练和模型评价与使用自定义函数进行模型训练和模型评价的结果
    在这里插入图片描述
    代码:
在这里插入代码片import numpy as np

import numpy
import pandas as pd
from sklearn.linear_model import LinearRegression

data = pd.read_csv(r'D:\微信下载\WeChat Files\wxid_0u8hx3fhkb6g22\FileStorage\File\2022-09\insurance.csv')
# 编码
data['sex'] = data['sex'].replace({'male':0, 'female':1 })
data['smoker']=data['smoker'].replace({'yes':0,'no':1})
data['region']=data['region'].replace({'northwest':0,'northeast':1,'southwest':2,'southeast':3})
X = data.drop(['charges'], axis=1)
y = data['charges']
rfc = LinearRegression()
rfc.fit(X,y)
y_pred = rfc.predict(X)

print('使用sklearn库函数预测', y_pred)

def r2_Score(y, y_pred):
    sst = sum((y - y.mean()) * (y - y.mean()))
    ssr = sum((y_pred - y.mean()) * (y_pred - y.mean()))
    sse = sum((y_pred - y) * (y_pred - y))
    r2 = ssr / sst
    return round(r2, 2)
    
print('自编函数r^2', r2_Score(y,y_pred))
print('计算实际模型决定系数' , rfc.score(X,y))

def linear(X,y):
    x = np.mat(np.c_[np.ones(X.shape[0]), X])
    y_data = np.mat(y)
    B = np.linalg.inv(x.T * x) * x.T * y_data.T
    y_hat = x * B
    return y_hat, B
ypre ,coef = linear(X,y)
print('自编函数预测', ypre)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一元线性回归多元线性回归是统计学中常用的回归分析方法。 一元线性回归是指只有一个自变量和一个因变量的线性关系。其数学模型可以表示为 y = β0 + β1x + ε,其中 y 表示因变量,x 表示自变量,β0 和 β1 表示回归方程的截距和斜率,ε 表示误差项。一元线性回归的目标是通过最小化误差项来拟合出最优的回归方程,进而进行预测和分析。常见的一元线性回归方法有最小二乘法和梯度下降法。 多元线性回归是指有多个自变量和一个因变量之间的线性关系。其数学模型可以表示为 y = β0 + β1x1 + β2x2 + ... + βnxn + ε,其中 y 表示因变量,x1、x2、...、xn 表示自变量,β0、β1、β2、...、βn 表示回归方程的截距和各个自变量的系数,ε 表示误差项。多元线性回归的目标是通过最小化误差项来拟合出最优的回归方程,进而进行预测和分析。常见的多元线性回归方法有最小二乘法和梯度下降法。 相比一元线性回归多元线性回归可以考虑多个自变量对因变量的影响,更加适用于实际问题的建模和预测。然而,多元线性回归也面临变量选择、多重共线性等问题,需要注意解释和优化模型的复杂性。 综上所述,一元线性回归多元线性回归是常用的回归分析方法,用于建立自变量和因变量之间的线性关系模型,以进行预测和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈笑死哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值