机器学习笔记(通俗易懂)---线性模型(分类)算法介绍(4)---附完整代码

机器学习笔记—线性模型(回归)算法介绍(4)—附完整代码

以下都是本人在学习机器学习过程中的一些心得和笔记,仅供参考。


线性模型是在实践中广泛使用的一类模型,被广泛研究。

线性模型利用输入特征的**线性函数(linear function)**进行预测。

1.用于回归的线性模型

  • 对于回归问题,线性模型预测的一般公式如下:

在这里插入图片描述

其中的w[0]是斜率,b是y轴偏移。

  • 下面在一维wave数据集上学习参数w[0]b

In

import  matplotlib.pyplot as plt
import mglearn
mglearn.plots.plot_linear_regression_wave()
plt.show()

Out

w[0]: 0.393906  b: -0.031804

在这里插入图片描述

图为 线性模型对wave数据集的预测结果

w[0]可以看出,斜率应该在0.4左右,在图像中也可以直观地确认这一点。

截距是指预测直线与y轴的交点:比0略小,也可以从图中确认。

用于回归的线性模型可以表示为这样的回归模型:对单一特征的预测结果是一条直线,两个特征的时候是一个平面,或者更高维度(即更多特征)时是一个超平面。

但是将直线的预测结果与KNeighborsRegressor的预测结果进行比较,能够发现直线的预测能力非常受限。

似乎数据的细节都丢失了。

对一维数据得出的观点有些片面,对于有多个特征的数据集而言,线性模型可以非常强大。


2.线性回归(普通最小二乘法)

  • 有许多不同的线性回归模型。这些模型之间的区别在于如何从训练数据中学习参数wb,以及如何控制模型的复杂度。
  • 线性回归也就是普通最小二乘法(OLS,是回归问题最简单也是最经典的线性方法。
  • OLS寻找参数wb,使得对训练集的预测值与真实的回归目标值y之间的均方误差最小。
  • 均方误差是预测值与真实值之差的平方和除以样本数。

PS:线性回归没有参数,这是一个优点,但是也因此无法控制模型的复杂度。

import mglearn
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X,y=mglearn.datasets.make_wave(n_samples=60)
#导入wave数据集
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42)
#random_state参数指定随机数生成器的种子,使每次拆分的数据集相同
lr = LinearRegression().fit(X_train, y_train)

斜率参数被保存在coef_属性中,而偏移或截距被保存在intercept_属性中:

In

print("lr.coef_:", lr.coef_)
#w(权重或系数)被保存在coef_属性中
print("lr.intercept_:", lr.intercept_)
#b(偏移或截距)被保存在intercept_属性中

Out

lr.coef_: [0.394]
lr.intercept_: -0.031804343026759746

coef_属性和intercept_属性的简单介绍:

coef_intercept_结尾处都有着下划线。其实,在sklearn中总是将从训练数据中得出的值保存在以下划线结尾的属性中。

  • 这是为了将其与其他用户设置的参数区分开。

intercept_属性是一个浮点数,而coef_属性是一个NumPy数组,每个元素对应一个输入特征。


接下来继续看模型在训练集和测试集上的性能:

In

print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lr.score(X_test, y_test)))

Out

Training set score: 0.67
Test set score: 0.66

R²约为0.66,这个结果不算好,但是可以发现,训练集和测试集的分数非常接近,表明可能存在欠拟合。


接下来导入波士顿房价数据集,这个数据集有506个样本和105个导出特征:

In

import  matplotlib.pyplot as plt
import mglearn
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X,y=mglearn.datasets.load_extended_boston()
#导入波士顿房价数据集
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)
#random_state参数指定随机数生成器的种子,使每次拆分的数据集相同
lr = LinearRegression().fit(X_train, y_train)
print
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值