创建岭回归器

创建岭回归器

线性回归的主要问题是对异常值敏感。在真实世界的数据收集过程中,经常会遇到错误的度量结果。而线性回归使用的普通最小二乘法,其目标的使平方误差最小化。这时,由于异常值误差的绝对值很大,因此会引起问题,从而破坏整个模型。

先看下面的图。

创建岭回归器

从上图可以看到,有两个数据点是异常值,但是这个模型需要拟合所有的数据点,因此导致整个模型都错了。如果去除两个异常值,可以得到下图实线的拟合曲线。

创建岭回归器

普通最小二乘法在建模时会考虑每个数据点的影响,因此,最终模型会像上图实线那样。很显然,这个模型不是最优的。为了避免这个问题,我们引入正则化的系数作为阈值来消除异常值的影响。这个方法被称为岭回归。

接下来,我们使用python建立岭回归器。

我们先准备好一份数据文件data_singlevar.txt,相关数据文件可到https://github.com/windform/Python-Machine-Learning-Cookbook/blob/master/Chapter01/data_multivar.txt这个地址下载。

(1)加载导入数据。

#加载、导入数据

import sys

import numpy as np

filename = 'data_multivar.txt'

x = []

y = []

with open(filename, 'r') as f:

for line in f.readlines():

data = [float(i) for i in line.split(',')]

xt, yt = data[:-1], data[-1]

x.append(xt)

y.append(yt)

(2)把数据分成训练数据集与测试数据集。

num_training = int(0.8 * len(x))

num_test = len(x) - num_training

# 训练数据

x_train = np.array(x[:num_training])

y_train = np.array(y[:num_training])

# 测试数据

x_test = np.array(x[num_training:])

y_test = np.array(y[num_training:])

(3)创建一个岭回归分类器.

from sklearn import linear_model

ridge_regressor = linear_model.Ridge(alpha=0.01,fit_intercept = True, max_iter=1000)

其中,alpha参数控制回归器的复杂程度。当alpha趋于0时,岭回归器就是用普通最小二乘法的线性回归器。

(4)训练岭回归器。

ridge_regressor.fit(x_train,y_train)

(5)预测并检验回归的正确性。

y_test_pred_ridge = ridge_regressor.predict(x_test)

#计算回归准确性

import sklearn.metrics as sm

#计算平均绝对误差

print ("Mean absolute error=", round(sm.mean_absolute_error(y_test,y_test_pred_ridge),2))

#计算均方误差

print ("Mean squared error=", round(sm.mean_squared_error(y_test,y_test_pred_ridge),2))

#计算中位数绝对误差

print ("Median absolute error=", round(sm.median_absolute_error(y_test,y_test_pred_ridge),2))

#计算解释方差分

print ("Explained variance error=", round(sm.explained_variance_score(y_test,y_test_pred_ridge),2))

#计算R方得分

print ("R2 score error=", round(sm.r2_score(y_test,y_test_pred_ridge),2))

输出结果如下:

('Mean absolute error=', 3.95)

('Mean squared error=', 23.15)

('Median absolute error=', 3.69)

('Explained variance error=', 0.84)

('R2 score error=', 0.83)


分享到:


相關文章: