在机器学习中,我们时常需要对给定的一系列点进行拟合,其中常见的拟合方式有线性拟合、套索拟合、多项式拟合等。通过拟合来进行回归,回归分析是一种预测性的建模技术,它研究的是因变量和自变量之间的关系。不管是建模,还是分析数据,回归分析都是重要的工具。
线性拟合是最简单的拟合,但是效果往往不佳,并且无法解决多分类的问题。
import csv
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
def lineFit(col):
y = read_col([col])
print(y)
x = np.arange(len(y))
lr = LinearRegression()
lr.fit(x.reshape(-1,1), y)
y_new = lr.predict(x.reshape(-1, 1))
plt.plot(x, y_new, color = 'g', marker = 'x',)
plt.xlim(0,len(y))
plt.savefig("test.png")
plt.show()
效果图如下:
但是,有时所给数据点用直线拟合并不合适,那么这时候就可以考虑用多项式拟合。但是需要注意的是,多项式中的degree即幂次数需要我们确定,过小会造成欠拟合,而过大则会造成过拟合。当我们使用数据训练分类器的时候,很重要的一点就是要在过度拟合与拟合不足之间达成一个平衡。而这就需要经验、实验的积累。
def PolyFitPlt(col):
y = read_col([col])
x = np.arange(len(y))
plt.scatter(x,y)
Poly_pro = PolynomialFeatures(degree = 9)
lr = LinearRegression()
x_transform = Poly_pro.fit_transform(x.reshape(-1,1))
lr.fit(x_transform,y)
xx = Poly_pro.transform(x.reshape(-1,1))
y_new = lr.predict(xx)
plt.plot(x, y_new, color = 'g', marker = 'x',)
plt.xlim(0,len(y))
plt.savefig("./FittingPic/" + str(col) + ".png")
plt.show()
结果发现,使用多项式回归之后效果明显改善不少。
除了以上两种回归,机器学习经常使用的还有岭回归与Lasso回归。
顺带提一下,岭回归应用的是L2正则惩罚,而Lasso回归应用的是L1正则惩罚。
它们的出现都是为了解决线性回归出现的过拟合问题。以及,这两种回归均通过在损失函数中引入正则化项来达到目的。岭回归不抛弃任何一个特征,缩小了回归系数。而Lasso回归能够使得损失函数中的许多θ均变成0,即使用过大的惩罚系数来降低θ的权重。
最后介绍一下逐步回归。
在处理高维数据集的时候,以及在处理多个自变量时,我们可以使用这种形式的回归。在这种回归方法中,自变量的选择是在一个自动的过程中完成的,其中包括非人为操作。
通过观察统计的值,如R-square,t-stats和AIC指标,来识别重要的变量。逐步回归通过同时添加/删除基于指定标准的协变量来拟合模型。下面列出了一些最常用的逐步回归方法:
在逐步回归法中,主要进行的是增加和删除每个步骤所需的预测。
- 向前选择法从模型中最显著的预测开始,然后为每一步添加变量。
- 向后剔除法与模型的所有预测同时开始,然后在每一步消除最小显着性的变量。