线性回归的底层实现

定义:

			通过一组训练集的特征,来进行线性组合,拟合一个函数,对其余对应的特征进行预测

首先线性回归先从简单的线性回归来进入主题在这里插入图片描述
这里就是简单的一个一元方程很容易看出,所以算法实现直接来

import numpy as np
import matplotlib.pyplot as plt

x=np.array([1.,2.,3.,4.,5.])
y=np.array([1.,3.,2.,3.,5.])

plt.scatter(x,y)
plt.axis([0,6,0,6])
plt.show()

这里就可以把原来的点给画出来,用来直观的看看关系

x_mean=np.mean(x)
y_mean=np.mean(y)

num=0.0
d = 0.0
for x_i,y_i in zip(x,y):
    num+= (x_i - x_mean)*(y_i - y_mean)
    d += (x_i - x_mean) **2
    
a=num/d
b= y_mean - a*x_mean

最后直接把你的预测图给画出来

y_pre=a*x+b

#  绘制原来的点
plt.scatter(x,y)
# 绘制 y预测的预测曲线
plt.plot(x,y_pre,color='r')
plt.axis([0,6,0,6])
plt.show()

效果图:
在这里插入图片描述

一个简单的线性回归就实现,恭喜你,你已经成功入门了。

多项式线性回归

这就是简单的表示多元线性回归最后你要计算的东西,现在记住在这里插入图片描述

在这里插入图片描述
过程推论我就不说了,需要的可以去网上查视频,不然一两句讲清楚对我的水平要求就太高了
下面一样的用上面的理论来实现

#训练
def LinearRegression_fit(x_train,y_train):
    #进行断言,保证 x_train,y_train 是一一对应的关系
    assert x_train.shape[0] == y_train.shape[0], \
        "the size of x_train must be equals to the size of y_train"
    #  hstack水平的把数组拼接  
    x_b=np.hstack([np.ones( (len(x_train),1) ),x_train])
    #  np.linalg.inv 将矩阵 变为逆阵       theta=[a0+a1+a2+....+aN]
    theta=np.linalg.inv((x_b.T).dot(x_b)).dot(x_b.T).dot(y_train)
    # 特征列表      
    return theta

def LinearRegression_pre(x_pre,theta):
    '''
    x_pre : 带预测数据集
    theta   特征
    '''
    x_b=np.hstack([np.ones( (len(x_pre),1) ),x_pre])
    return x_b.dot(theta)   #这里就是一开始的 y(i)的值

from sklearn.datasets import load_boston 
from sklearn.cross_validation import train_test_split
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error
boston=load_boston()
X=boston.data
y=boston.target

到这儿,咱的准备小工作基本ok
开始正式开搞

将数据集进行分割

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.1,random_state=33) 

调用方法

theta=LinearRegression_fit(X_train,y_train)
y_pre=LinearRegression_pre(X_test,theta)

#使用  R-squared   MSE  MAE  三种指标对平均回归配置的K近邻模型在测试集上进行性能评估
print(r2_score(y_test,y_pre))    #顺序不能变
print('MSE 评分:',
     mean_squared_error(y_test ,y_pre))
print('MAE 评分:',
     mean_absolute_error(y_test,y_pre ) )

last but not least 直观绘图

#用直线的形式将预测与实际值绘制出来
a=[]
for i in range(y_test.size):
    a.append(i)
x=np.array(a,dtype = int)
plt.plot(x,y_pre,color='r')
plt.plot(x,y_test,color='blue')
plt.axis([0,x.size,0,40])
plt.show()

效果图:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值