线性回归的定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。

简单线性回归的实现

手动生成五个点 (1,1),(2,3),(3,2),(4,3),(5,5) (1,1),(2,3),(3,2),(4,3),(5,5)(1,1),(2,3),(3,2),(4,3),(5,5) 求一条最佳直线来拟合这五个点

#SimpleLinearRegression.py

import numpy as np

class SimpleLinearRegression1:

def __init__(self):

"""初始化Simple Linear Regression模型"""

self.a_ = None

self.b_ = None

def fit(self, x_train, y_train):

"""根据训练数据集x_train, y_train训练 SimpleLinearRegression模型"""

assert x_train.ndim == 1,\

"Simple Linear Regressor can only solve single feature training data."

assert len(x_train) == len(y_train),\

"the size of x_train must be equal to the size of y_train"

x_mean = np.mean(x_train)

y_mean = np.mean(y_train)

num = 0.0

d = 0.0

for x,y in zip(x_train, y_train):

num += (x - x_mean) * (y - y_mean)

d += (x - x_mean) ** 2 self.a_ = num/d

self.b_ = y_mean - self.a_ * x_mean

return self

def predict(self, x_predict):

"""给定待预测数据集x_predict,返回x_predict的结果向量"""

assert x_predict.ndim == 1,\

"Simple Linear Regressor can only solve single feature training data."

assert self.a_ is not None and self.b_ is not None,\

"must fit before predict!"

return np.array([self._predict(x) for x in x_predict])

def _predict(self, x_single):

"""给定单个待预测数据x_single,返回x_single的预测结果"""

return self.a_ * x_single + self.b_

def __repr__(self):

return "SimpleLinearRegression1()"

*****************************************************************************

#test.py

import numpy as np

from SimpleLinearRegression import SimpleLinearRegression1

import matplotlib.pyplot as plt

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

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

x_predict = 6 reg1= SimpleLinearRegression1()

reg1.fit(x, y)

y_predict = reg1.predict(np.array([x_predict]))

print(y_predict)

y_hat = reg1.a_ * x + reg1.b_

plt.scatter(x, y)

plt.plot(x, y_hat, color = 'r')

plt.axis([0,6,0,6])

plt.show()

“我们相信人人都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。这里是北京尚学堂,初学者转行到IT行业的聚集地。"

查看原文 >>
相关文章