(四)线性回归法

笔记资源:(1条消息) 机器学习入门专栏笔记对应jupyternotebook以及封装的各种算法个人笔记,如有错误,感谢指出!-机器学习文档类资源-CSDN文库

特点:

  • 解决回归问题

  • 思想简单,容易实现

  • 许多强大的非线性模型的基础

  • 结果具有很好的可解释性

  • 蕴含机器学习中的很多重要思想

概括:

寻找一条直线,最大程度的拟合样本特征和样本输出标记之间的关系

分类问题与回归问题:

上图的分类问题横纵坐标分别表示一个特征,回归问题只有横坐标表示一个特征,如果表示俩个特征就变成了三维模型。

样本特征只有一个的回归称为简单线性回归。多个叫多元线性回归。

在这个模型当中,我们并没有运用神经网络的方式训练参数a和b,而是将这俩个参数以数学的形式表示出来,再输入程序中,直接对数据进行处理,进而得出我们的线性回归模型。因此要区别于深度学习的过程。此模型的建立过程并没有使用迭代!

一,简单线性回归

其中排除第一个是因为有正负号会抵消

排除第二个是因为绝对值并不是一个处处可导的函数,造成后续操作困难

因此选用平方的方式。

监督学习,x(i), y(i)是已知数

类似上边这个函数称为损失函数(loss function)或效用函数(utilityfunction)。

机器学习首先通过分析问题来确定问题的损失函数或效用安徽念书,通过最优化损失函数或者效用函数,来获得机器学习的模型

损失函数尽可能小,效用函数尽可能大

几乎所有的参数学习算法都是这样的套路,比如线性回归,SVM,多项式回归,神经网络,逻辑回归等,区别是模型不同,建立的目标函数不同,优化的方式也不同,因此产生了一门学科:最优化原理,包含凸优化

简单线性回归典型的最小二乘法问题:最小化误差的平方

参数a和b可以表示为:

二,简单线性回归的实现 Simple Linear Regression

简单实现与测试:

简单归一化算法的封装:

三,衡量线性回归算法的指标:MSE,RMSE和MAE

其中,MSE的量纲与y不同,所以可以使用RMSE来统一量纲,这样可以很好的解释这个误差代表什么,即代表与样本中的y数据偏离的具体数值。

RMSE会放大预测结果与真实结果之间的差距,尤其是差距较大时候。而MAE并没有方法这种差异。因为没有平方的差距。

但是当我们需要训练参数的时候,我们可以利用减少RMSE来训练模型。

波士顿房产数据

import numpy as np

importmatplotlib.pyplot as plt

from sklearn importdatasets

boston =datasets.load_boston()

boston.keys() #查看数据库的关键字

print(boston.DESCR) #查看数据库的属性,包括样本数量和特征

boston.feature_names #查看特征名称,按顺序列出

x = boston.data[:,5] #只使用房间数量这个特征,特征对应列

y = boston.target

plt.scatter(x, y)

plt.show()

有些数据超过了问卷限度所以最大值是50没有意义的数据,要过滤

x = x[y < 50.0]

y = y[y < 50.0]

plt.scatter(x_train,y_train) #训练样本点

plt.scatter(x_test,y_test, color="c") #测试样本点

plt.plot(x_train,reg.predict(x_train), color='r') #训练后的预测数据线

plt.show()

sklearn中的MSE和MAE

from sklearn.metricsimport mean_squared_error

from sklearn.metricsimport mean_absolute_error

mean_squared_error(y_test,y_predict)

mean_absolute_error(y_test,y_predict)

四,衡量线性回归最好的指标:R Squared

分类问题的准确度:1最好,0最差

对于预测问题需要有更好的标准

比如我们用这个线性回归模型分别预测波士顿房价和学生成绩,那么这是俩个不同量级的数据,对应MSE这些指标也都是量级上的差异,我们就没办法判断模型更适合预测哪种类型的数据。R Squared可以解决这一问题

分子是使用模型预测产生的错误,分母表示使用y等于y(mean)预测产生的错误

scikit-learn中的 r2_score

from sklearn.metricsimport r2_score

r2_score(y_test,y_predict)

五,多元线性回归

多元线性回归的正规方程解(normal equation)

问题:时间复杂度高:O(n^3)->O(n^2.4)(简单优化后的时间复杂度还是很高)

优点:不需要对数据做归一化处理(对比KNN需要做预处理统一量纲)

多元线性回归程序封装:

scikit-learn解决回归问题

fromsklearn.linear_model import LinearRegression

lin_reg =LinearRegression()

lin_reg.fit(X_train,y_train)

lin_reg.coef_ #查看系数,系数正负表示±相关,具有一定的可解释性

lin_reg.intercept_ #查看截距

lin_reg.score(X_test,y_test)

KNN Regressor 利用KNN解决回归问题

调用的包不同

from sklearn.neighborsimport KNeighborsRegressor

knn_reg =KNeighborsRegressor()

knn_reg.fit(X_train_standard,y_train)

knn_reg.score(X_test_standard,y_test)

网络搜索:

fromsklearn.model_selection import GridSearchCV

param_grid = [

{

"weights":["uniform"],

"n_neighbors": [i for i inrange(1, 11)]

},

{

"weights":["distance"],

"n_neighbors": [i for i inrange(1, 11)],

"p": [i for i in range(1,6)]

}

]

knn_reg =KNeighborsRegressor()

grid_search =GridSearchCV(knn_reg, param_grid, n_jobs=-1, verbose=1)

grid_search.fit(X_train_standard,y_train)

grid_search.best_params_

grid_search.best_score_

比之前线性回归的结果差,原因是采取不同的评分方式,网络搜索CV采取交叉验证

grid_search.best_estimator_.score(X_test_standard,y_test)

当然也不一定比线性回归好,所以还不能仅仅通过score判断俩种算法好坏

六,更多线性回归的讨论

线性回归算法:

  • 典型的参数学习

对比KNN:非参数学习

  • 只能解决回归问题

  • 优点:具有一定的可解释性

虽然很多分类方法中,线性回归是基础,比如逻辑回归

对比KNN:既可以解决分类问题,又可以解决预测问题

  • 对数据有假设:假设数据是线性相关,但不一定只能解决线性问题

对比KNN没有假设

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值