【3】线性回归

线性回归在实际中应用广泛,以下在一维wave数据集上进行展示,

import numpy as np
import pandas as pd
import mglearn
import matplotlib.pyplot as plt

mglearn.plots.plot_linear_regression_wave()

输出

w[0]: 0.393906  b: -0.031804

【3】线性回归_第1张图片
对单一特征的数据集来讲,预测结果是一条直线,对多个特征的数据集来说,预测结果是一个超平面。当处理特征非常多的数据集时,线性模型会显示出强大的优势。最简单和经典的线性模型是线性回归。线性回归没有参数,这是一个优点(不用调参),但也因此无法控制模型的复杂度。
使用scikit-learn中的LinearRegression来实施线性回归,

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X,y = mglearn.datasets.make_wave(n_samples=60)
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=42)

lr = LinearRegression().fit(X_train,y_train)

print('lr.coef_:{}'.format(lr.coef_)) #训练出的参数,以下划线结尾,便于区分
print('lr.intercept_:{}'.format(lr.intercept_))

输出

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

评价训练精度与测试精度

print('训练集准确度:{:.2f}'.format(lr.score(X_train,y_train)))
print('测试集准确度:{:.2f}'.format(lr.score(X_test,y_test)))

输出

训练集准确度:0.67
测试集准确度:0.66

训练精度与测试精度都比较低,说明可能存在欠拟合。下面我们尝试在高维数据集上应用线性回归,因为在高维数据集上线性模型会变得很强大,所以过拟合的可能性会变大。下面导入波士顿房价数据集进行分析(有105个特征),

X,y = mglearn.datasets.load_extended_boston()

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=0)
lr = LinearRegression().fit(X_train,y_train)

print('训练集准确度:{:.2f}'.format(lr.score(X_train,y_train)))
print('测试集准确度:{:.2f}'.format(lr.score(X_test,y_test)))

输出

训练集准确度:0.95
测试集准确度:0.61

可以看出,训练精度比较高,测试精度比较低,两者差距明显,这是过拟合的标志。我们需要找寻一个可以调节模型复杂度的线性模型,来控制过拟合和欠拟合的程度。

你可能感兴趣的:(Python机器学习,—,学习笔记,机器学习,python)