机器学习入门(二) 之 简单线性回归算法
这里我们先来看下面的公式:看到这条公式相信大家并不陌生,在高中数学我们就接触到的统计中,我们就经常使用上面的公式计算预测值,上述方法叫做简单线性回归的最小二乘法。为此,还专门返回去复习高中数学。最小二乘法的原理其实是,求一条直线,使得我们的训练数据集到这条直线距离之和最小。具体公式推导参考:最小二乘法有了上述公式,我们就可以通过对公式进行封装,形成一个二元线性回归算法的APIimport...
这里我们先来看下面的公式:
看到这条公式相信大家并不陌生,在高中数学我们就接触到的统计中,我们就经常使用上面的公式计算预测值,上述方法叫做简单线性回归的最小二乘法。
为此,还专门返回去复习高中数学。最小二乘法的原理其实是,求一条直线,使得我们的训练数据集到这条直线距离之和最小。具体公式推导参考:最小二乘法
有了上述公式,我们就可以通过对公式进行封装,形成一个二元线性回归算法的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(方差))
这里用我所看的教学视频中,采用波士顿房价作为预测数据(大家也可以访问下面网址,是我看的教学视频,感觉讲的很不错)
代码展示
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()
可以看到我们拟合出的直线和预测结果的效果:
希望对读者有所帮助,喜欢的话可以关注一下我的公众号,我会把学习笔记发在上面,大家可以一起共同学习!
更多推荐
所有评论(0)