首页 > 代码库 > 中国mooc北京理工大学机器学习第二周(二):回归
中国mooc北京理工大学机器学习第二周(二):回归
一、线性回归(Liner Regression)
利用数理统计中的回归分析,来确定两种或两种以上变量间相互依赖的定量关系的统计方法。
线性回归是用最小平方函数对一个或多个自变量和因变量之间进行建模。
导入和使用比较简单。
from sklearn import linear_model linear = linear_model.LinearRegression() linear.fit(datasets_X, datasets_Y)
预测房屋价格。
import matplotlib.pyplot as plt import numpy as np from sklearn import linear_model # 读取数据集 datasets_X = [] datasets_Y = [] fr = open(‘prices.txt‘,‘r‘) lines = fr.readlines() for line in lines: items = line.strip().split(‘,‘) datasets_X.append(int(items[0])) datasets_Y.append(int(items[1])) length = len(datasets_X) datasets_X = np.array(datasets_X).reshape([length,1]) datasets_Y = np.array(datasets_Y) minX = min(datasets_X) maxX = max(datasets_X) X = np.arange(minX,maxX).reshape([-1,1]) linear = linear_model.LinearRegression() linear.fit(datasets_X, datasets_Y) # 图像中显示 plt.scatter(datasets_X, datasets_Y, color = ‘red‘) plt.plot(X, linear.predict(X), color = ‘blue‘) plt.xlabel(‘Area‘) plt.ylabel(‘Price‘) plt.show()
二、多项式回归(Polynomial Regression)
是研究一个因变量与多个自变量之间的多项式的回归分析。
多项式的优点是增加x的幂次来拟合曲线。
import matplotlib.pyplot as plt import numpy as np from sklearn import linear_model from sklearn.preprocessing import PolynomialFeatures # 读取数据集 datasets_X = [] datasets_Y = [] fr = open(‘prices.txt‘,‘r‘) lines = fr.readlines() for line in lines: items = line.strip().split(‘,‘) datasets_X.append(int(items[0])) datasets_Y.append(int(items[1])) length = len(datasets_X) datasets_X = np.array(datasets_X).reshape([length,1]) datasets_Y = np.array(datasets_Y) minX = min(datasets_X) maxX = max(datasets_X) X = np.arange(minX,maxX).reshape([-1,1]) poly_reg = PolynomialFeatures(degree = 2) X_poly = poly_reg.fit_transform(datasets_X) lin_reg_2 = linear_model.LinearRegression() lin_reg_2.fit(X_poly, datasets_Y) # 图像中显示 plt.scatter(datasets_X, datasets_Y, color = ‘red‘) plt.plot(X, lin_reg_2.predict(poly_reg.fit_transform(X)), color = ‘blue‘) plt.xlabel(‘Area‘) plt.ylabel(‘Price‘) plt.show()
三、岭回归(ridge regression)
一种专用于共性线性数据分析的有偏估计回归方法,改良最小二乘法。
sklearn。linear_model.Ridge中使用
from sklearn.linear_model import Ridge clf = Ridge(alpha=.5) X = [[0,0],[0,0],[1,1]] y = [0,.1,1] clf.fit(X,y) print(clf.coef_) print(clf.intercept_)
Ridge
类已经设置了一系列默认的参数,因此clf = Ridge()
即可以完成实例化。
但是,了解一下它的参数还是有必要的:
alpha
:正则化项的系数copy_X
:是否对X数组进行复制,默认为True
,如果选False
的话会覆盖原有X数组fit_intercept
:是否需要计算截距max_iter
:最大的迭代次数,对于sparse_cg
和lsqr
而言,默认次数取决于scipy.sparse.linalg
,对于sag
而言,则默认为1000次。normalize
:标准化X
的开关,默认为False
solver
:在计算过程中选择的解决器auto
:自动选择svd
:奇异值分解法,比cholesky
更适合计算奇异矩阵cholesky
:使用标准的scipy.linalg.solve
方法sparse_cg
:共轭梯度法,scipy.sparse.linalg.cg
,适合大数据的计算lsqr
:最小二乘法,scipy.sparse.linalg.lsqr
sag
:随机平均梯度下降法,在大数据下表现良好。
注:后四个方法都支持稀疏和密集数据,而sag
仅在fit_intercept
为True时支持密集数据。
tol
:精度random_state
:sag
的伪随机种子
以上就是所有的初始化参数,当然,初始化后还可以通过set_params
方法重新进行设定。
回归分析
在实例化Ridge
类以后,就可以直接使用Ridge
中集成的方法来进行回归了,与绝大多数的sklearn类一样,Ridge
使用fit
方法执行计算
fit(X,y,sample\_weight=None)
:X
是一个array
类型,这是特征矩阵,包含着数据集每一条记录的特征值(N*M),y
是结果矩阵,同样是array
类型,可以是N*1的形状,也可以是N*K的形状,sample_weight
代表着权重,可以是一个实数,也可以给每一条记录分配一个值(array
类型)。
得到回归函数后,我们可以通过predict
来使用回归函数。
predict(X)
:X
测试数据集,此方法将返回回归后的结果
对于模型的好坏,Ridge
当然提供了评价的方法——score
score(X,y,sample_weight=None)
:X为测试数据,y是测试数据的实际值,类型与fit中的相同,sample是权重
在sklearn中并没有提供直接的查看回归方程的函数,因此查看的时候需要自己转化一下。其实,sklearn就是把相关系数和残差分开保存了,因此,查看的时候要调用coef_
和intercept_
两个属性。
coef_
:相关系数(array类型)intercept_
:截距,在fit_intercept=False
的时候,将会返回0
可能有用的方法
这些方法在sklearn的基类中就已经集成,但在一般情况下,通常不会用到。
get_params(deep=True)
:这是获取Ridge
实例属性取值的方法,可以忽略set_params(**params)
:与get_params
方法相对,是设置属性值,在岭回归中还是比较重要的,毕竟岭回归的alpha值在一开始可能并不知道,需要在一个范围内进行尝试,因此,利用这个方法来设置alpha值还是比较有用的。
以上。
:)
中国mooc北京理工大学机器学习第二周(二):回归