简单线性回归
什么是线性回归呢?举个例子,房价和房屋面积的关系中,当房屋面积增大,则房屋价格也会增大。呈现出一条线性分布,如图 横坐标为房屋面积,纵坐标为房屋价格 每个点表示一个房子的面积和对应的价格 直线为他们的线性分布
直线可以表示为函数
拟合结果为
我们如何寻找最佳拟合函数呢?当拟合结果越接近真实结果时拟合的效果越好
我们用最小二乘法来表示拟合程度,用来表示误差大小的也称为损失函数
什么时候损失函数会最小呢?
当损失函数导数为0时,损失函数取得最小值。当我们对损失函数求导后可以得到最优的a,b值
最后当我们计算出最小a,b值将新的x,y调用y=ax+b即可获得预测值
损失函数or评价函数
-
均方误差MSE
前面的损失函数其实有个缺陷,因为损失函数最终会和m有关所以我们需要把损失函数最后除以m,这样损失就和样本数无关了。而形成的新的损失函数就是我们说的均方误差
原理
np.sum((y_predict - y_test)**2) / len(y_test)
scikit-learn
from sklearn.metrics import mean_squared_error mean_squared_error(y_test, y_predict)
-
均方根误差RMSE
因为MSE会放大误差,量纲和原Y的量纲相差较大,所以有的时候会在MSE上在加一个根号来解决这个问题
原理
from math import sqrt sqrt(np.sum((y_predict - y_test)**2) / len(y_test))
-
平均绝对误差MAE (因为绝对值不适合求导所以不适合做损失函数,但是可以做评价函数)
原理
np.sum(np.absolute(y_predict - y_test))/len(y_test)
scikit-learn
from sklearn.metrics import mean_absolute_error mean_absolute_error(y_test, y_predict)
-
R Squared
RMSE和MAE最终计算出来结果的量纲和预测结果的量纲时相近的,而分类的准确度是用0~1之间的数来评价准确度的。
推导
原理
1 - mean_squared_error(y_test, y_predict)/np.var(y_test)
scikit-learn
from sklearn.metrics import r2_score r2_score(y_test, y_predict) #LinearRegression中的score返回就是r2_score