机器学习入门(二) 之 简单线性回归算法

这里我们先来看下面的公式:
在这里插入图片描述

看到这条公式相信大家并不陌生,在高中数学我们就接触到的统计中,我们就经常使用上面的公式计算预测值,上述方法叫做简单线性回归的最小二乘法。

为此,还专门返回去复习高中数学。最小二乘法的原理其实是,求一条直线,使得我们的训练数据集到这条直线距离之和最小。具体公式推导参考:最小二乘法

有了上述公式,我们就可以通过对公式进行封装,形成一个二元线性回归算法的API

import numpy as np

class SimpleLinearRegression1:
	def __init__(self):

 	self.a_ = None
        self.b_ = None	
        
	def fit(self, x_train, y_train):
	assert x_train.ndim == 1,\
   	  "Simple LinearRegressor 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 = (x_train - x_mean).dot(y_train - y_mean)
	d = (x_train - x_mean).dot(x_train - x_mean)

	self.a_ = num / d
	self.b_ = y_mean - self.a_ * x_mean
	return self
	def predict(self, 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):
    	return self.a_ * x_single + self.b

	def __repr__(self):
    	return"SimpleLinearRegression1()"_

封装好了我们自己的线性回归算法,我们就可以对二元具有线性特征的数据进行预测了。在测试数据时,我们还常常使用几个指标来评价我们的预测结果的预测效果:

MAE(平均绝对误差)
在这里插入图片描述
不难看出,MAE就算的就是我们预测出的值与测试数据中的实际值差的绝对值求和后的平均值。可以计算出我们的预测结果与实际结果的偏差大小。

MSE(均方误差)

在这里插入图片描述
均方误差其实就是预测出的值与测试数据中的实际值差的绝对值的平方求和后的平均值。

R ^2(决定系数)(效果最好)
在这里插入图片描述
经过下面推算推算,R^2可以表示为(1-MAE/Var(方差))
在这里插入图片描述
这里用我所看的教学视频中,采用波士顿房价作为预测数据(大家也可以访问下面网址,是我看的教学视频,感觉讲的很不错)

Python 机器学习应用

代码展示

import matplotlib.pyplot as plt
from sklearn import *
from Simple_LR_class import SimpleLinearRegression1

boston = datasets.load_boston()
x = boston.data[:, 5]
y = boston.target
x = x[y < 50.0]
y = y[y < 50.0]

x_train, x_test, y_train, y_test = model_selection.train_test_split(x, y)
lr_clf = SimpleLinearRegression1()
lr_clf.fit(x_train, y_train)
y_predict = lr_clf.predict(x_test)

plt.scatter(x_train, y_train)
plt.plot(x_train, lr_clf.predict(x_train), color='r')
plt.plot(x_test, lr_clf.predict(x_test), color='g')
MAE = metrics.mean_absolute_error(y_test, y_predict)
MSE = metrics.mean_squared_error(y_test, y_predict)
R_square = metrics.r2_score(y_test, y_predict)
print(MSE)
print(MAE)
print(R_square)
plt.show()
可以看到我们拟合出的直线和预测结果的效果:

在这里插入图片描述
在这里插入图片描述
希望对读者有所帮助,喜欢的话可以关注一下我的公众号,我会把学习笔记发在上面,大家可以一起共同学习!

在这里插入图片描述
Alt

发布了19 篇原创文章 · 获赞 12 · 访问量 6106

猜你喜欢

转载自blog.csdn.net/Rosen_er/article/details/104310821