【机器学习】机器学习之一元线性回归

一、什么是一元线性回归

  回归分析(Regression Analysis),是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。

二、使用Excel完成一元线性回归

(1)选取20组数据进行回归

在这里插入图片描述

(2)选取200组数据进行回归

在这里插入图片描述

(3)选取2000组数据进行回归

在这里插入图片描述

(4)选择20000组数据进行回归

在这里插入图片描述

三、自定义最小二乘法实现一元线性回归

1、自定义回归函数

#定义拟合函数
def fit(data):
    n = len(data.loc[:,"Height"])
    x_aver = np.mean(data.loc[:,"Height"]) #求x平均值
    y_aver = np.mean(data.loc[:,"Weight"]) #求y平均值
    sum_yx = 0
    sum_x2 = 0
    
    # 求xy的和,以及x^2的和
    for i in range(n):
        x = data.loc[i,"Height"]
        y = data.loc[i,"Weight"]
        sum_yx += y*x
        sum_x2 += x**2
        
    #根据公式计算w,b
    w = (sum_yx - n*x_aver*y_aver) / (sum_x2-n*(x_aver**2))
    b = y_aver - w*x_aver
    return w,b  #返回参数 y = wx +b 

2、选取20组数据进行回归

#使用20个点进行拟合
w,b = fit(data.iloc[:20])
y_pred = w*x[:20] + b
plt.xlabel("Height")
plt.ylabel("Weight")
plt.scatter(x[:20],y[:20],c = 'b',alpha = 0.6)
plt.plot(x[:20], y_pred,color = 'r')
print("拟合函数R2为: r2 = ",r2_score(y[:20],y_pred))

请添加图片描述
拟合函数R2为: r2 = 0.3254230249366241

3、选取200组数据进行回归

#使用200个点进行拟合
w,b = fit(data.iloc[:200])
y_pred = w*x[:200] + b
plt.xlabel("Height")
plt.ylabel("Weight")
plt.scatter(x[:200],y[:200],c = 'b',alpha = 0.6)
plt.plot(x[:200], y_pred,color = 'r')
plt.savefig("自定义200.png")
plt.show()
print("拟合函数R2为: r2 = ",r2_score(y[:200],y_pred))

请添加图片描述
拟合函数R2为: r2 = 0.3099955343309223

4、选取2000组数据进行回归

#使用2000个点进行拟合
w,b = fit(data.iloc[:2000])
y_pred = w*x[:2000] + b
plt.xlabel("Height")
plt.ylabel("Weight")
plt.scatter(x[:2000],y[:2000],c = 'b',alpha = 0.6)
plt.plot(x[:2000], y_pred,color = 'r')
plt.savefig("自定义2000.png")
plt.show()
print("拟合函数R2为: r2 = ",r2_score(y[:2000],y_pred))

请添加图片描述
拟合函数R2为: r2 = 0.24830120336384298

三、使用Sklearn库实现一元线性回归

  以200组数据进行回归

#导入库
from sklearn import datasets    #导入数据模块
from sklearn.model_selection import train_test_split   #导入切分训练集、测试集模块
from sklearn.linear_model import LinearRegression
from matplotlib import pyplot as plt
import pandas as pd
from sklearn.metrics import r2_score
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

#读取数据
data = pd.read_csv("weights_heights.csv",encoding = 'gb2312')
x = data[["Height"]]
y = data[["Weight"]]

x_train, x_test, y_train, y_test = train_test_split(x[:200], y[:200],test_size = 0.2)
model = LinearRegression()   #实例化模型
model.fit(x_train, y_train)  #用训练数据训练

plt.scatter(x[:200],y[:200],c = 'b',alpha = 0.6)
plt.plot(x_test, model.predict(x_test), color='r')
plt.xlabel("Height")
plt.ylabel("Weight")
plt.savefig("一元线性回归.png")
plt.show()
print("拟合函数R2为: r2 = ",r2_score(y_test,model.predict(x_test)))

请添加图片描述
拟合函数R2为: r2 = 0.2304650098515707

四、总结

  最小二乘法是试图找到一条直线,使得所有样本点到直线的欧氏距离之和最小,即最小化均方误差。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值