简单线性回归

一:定义

  简单理解:y=ax+b,x是特征值,y是标记,模型就是计算a和b的值。

二:最优模型

  尽量使的y的预测值与真实值的差小,即对 y-y(i)进行求和使其值最小,即(y-y(i))^2小。

  主要是最小二乘法和对a,b求偏导,得出

  a = 对 (x(i)-x的平均值)*(y(i)-y的平均值) 求和/对 (x(i)-x的平均值)^2 求和

  b = y的平均值-a*x的平均值

三:自定义线性回归类测试

 

import numpy as np


class Simple_Linear_Regression:

    def __init__(self):
        self.a_ = None
        self.b_ = None

    def fit(self,x,y):
        num = 0.0
        d = 0.0
        x_mean = np.mean(x)
        y_mean = np.mean(y)
        # for x_i,y_i in zip(x,y):
        #     num += (x_i-x_mean)*(y_i-y_mean)
        #     d += (x_i-x_mean)**2
        #向量法
        num = (x-x_mean).dot(y-y_mean)
        d = (x-x_mean).dot(x-x_mean)
        self.a_ = num/d
        self.b_ = y_mean - self.a_ * x_mean
        return self

    def predict(self,x):

        x = np.array(x)
        y_predict = [self._pre(i) for i in x]
        return y_predict

    def _pre(self,x):
        return self.a_ * x + self.b_

    def __repr__(self):
        print("Simple_Linear_Regression")

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

s = Simple_Linear_Regression()
s.fit(x,y)
#参数
print(s.a_)
print(s.b_)

x_test = np.array([6,4,8])
y_pre = s.predict(x_test)

print(y_pre)

 

 四:图形展示

plt.scatter(x,y)
plt.plot(x,s.a_*x+s.b_,color='r')
plt.show()

 

 

posted @ 2019-04-18 14:26  Coding_Now  阅读(286)  评论(0编辑  收藏  举报