1. sklearn库中的线性回归
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression # 线性回归
# ##线性回归
# paras:
# fit_intercept:boolean,是否进行拦截计算
# normalize:boolean,可选,默认false,若fit_intercept = false则忽略此参数。若为true,则先正则化在执行回归
# copy_X:boolean,是否覆盖原数据
# n_jobs:int,默认1,计算时设置的任务个数
#
# attributes:
# coef_:array,形状(n_features)|(n_targets,n_features),参数向量(在损失函数中为W)
# intercept_:float|array,形状(n_targets)
#
# methods:
# decision_function(X):对训练数据进行预测
# fit(X, y[, check_input]):使用坐标下降拟合数据
# get_params([deep]):获取参数
# predict(X):使用线性模型进行预测
# score(X, y[, sample_weight]):返回预测的确定系数R^2
# set_params(**params):设置此估算器的参数
# 样本数据集,第一列为x,第二列为y,在x和y之间建立回归模型
data=[
[0.067732,3.176513],[0.427810,3.816464],[0.995731,4.550095],[0.738336,4.256571],[0.981083,4.560815],
[0.526171,3.929515],[0.378887,3.526170],[0.033859,3.156393],[0.132791,3.110301],[0.138306,3.149813],
[0.247809,3.476346],[0.648270,4.119688],[0.731209,4.282233],[0.236833,3.486582],[0.969788,4.655492],
[0.607492,3.965162],[0.358622,3.514900],[0.147846,3.125947],[0.637820,4.094115],[0.230372,3.476039],
[0.070237,3.210610],[0.067154,3.190612],[0.925577,4.631504],[0.717733,4.295890],[0.015371,3.085028],
[0.335070,3.448080],[0.040486,3.167440],[0.212575,3.364266],[0.617218,3.993482],[0.541196,3.891471]
]
#生成X和y矩阵
dataMat = np.array(data)
X = dataMat[:,0:1] # 变量x
y = dataMat[:,1] #变量y
# ========线性回归========
model = LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
model.fit(X, y) # 线性回归建模
print('系数矩阵:\n',model.coef_)
print('线性回归模型:\n',model)
# 使用模型预测
predicted = model.predict(X)
# 绘制散点图 参数:x横轴 y纵轴
plt.scatter(X, y, marker='x')
plt.plot(X, predicted,c='r')
# 绘制x轴和y轴坐标
plt.xlabel("x")
plt.ylabel("y")
# 显示图形
plt.show()
sklearn库学习-线性回归
官方API
2. sklearn中Lasso回归
import numpy as np # 快速操作结构数组的工具
import matplotlib.pyplot as plt # 可视化绘制
from sklearn.linear_model import Lasso,LassoCV,LassoLarsCV # Lasso回归,LassoCV交叉验证实现alpha的选取,LassoLarsCV基于最小角回归交叉验证实现alpha的选取
## #Lasso回归:L1正则化
# 估计稀疏系数的线性模型,压缩感知领域的基础
# 使用坐标下降法
# sklearn中通过交叉验证来公开设置α参数的对象:LassoCV(适用于高维数据集),LassoLarsCV(适用于样本数量远小于特征数量的数据集)
#
# paras:
# alpha:float,可选,默认1,alpha = 0 相当于最小二乘法
# fit_intercept:boolean,是否进行拦截计算
# normalize:boolean,可选,默认false,若fit_intercept = false则忽略此参数。若为true,则先正则化在执行回归
# copy_X:boolean,是否覆盖原数据
# precompute:True|Fase|array-like,默认False,是否适用预计算的Gram矩阵加速计算
# max_iter:int,可选,最大迭代次数
# tol:float,可选,优化容忍度
# warm_start:boolean,可选,若Ture重复使用上一次学习作为初始化,否则直接清除上次方案
# positive:boolean,可选,若True强制系数为正
# selection:str,默认cyclic,若为random,则会随机更新参数,默认则会依次更新
# random_state:int,RandomState instance or None,可选,作为随机数产生器的种子,选择随机的特征更新
# 若为int,random_state做为随机数生成器的种子
# 若为RandomState,则是随机数生成器
# 若为None,做为np.random使用的随机数生成器,当slelction == random
# seed:str,可选,默认cyclic,仅当selection == random时可用
#
# attributes:
# coef_:array,形状(n_features)|(n_targets,n_features),参数向量(在损失函数中为W)
# intercept_:float|array,形状(n_targets)
# n_iter_:int|array-like,形状(n_targets)
#
# methods:
# fit(X, y[, check_input]):使用坐标下降拟合数据
# get_params([deep]):获取参数
# path(X, y[, l1_ratio, eps, n_alphas, …]):使用坐标下降计算弹性网路径
# predict(X):使用线性模型进行预测
# score(X, y[, sample_weight]):返回预测的确定系数R^2
# set_params(**params):设置此估算器的参数
# 样本数据集,第一列为x,第二列为y,在x和y之间建立回归模型
data=[
[0.067732,3.176513],[0.427810,3.816464],[0.995731,4.550095],[0.738336,4.256571],[0.981083,4.560815],
[0.526171,3.929515],[0.378887,3.526170],[0.033859,3.156393],[0.132791,3.110301],[0.138306,3.149813],
[0.247809,3.476346],[0.648270,4.119688],[0.731209,4.282233],[0.236833,3.486582],[0.969788,4.655492],
[0.607492,3.965162],[0.358622,3.514900],[0.147846,3.125947],[0.637820,4.094115],[0.230372,3.476039],
[0.070237,3.210610],[0.067154,3.190612],[0.925577,4.631504],[0.717733,4.295890],[0.015371,3.085028],
[0.335070,3.448080],[0.040486,3.167440],[0.212575,3.364266],[0.617218,3.993482],[0.541196,3.891471]
]
#生成X和y矩阵
dataMat = np.array(data)
print (dataMat)
X = dataMat[:,0:1] # 变量x
y = dataMat[:,1] #变量y
#print (X)
#print (y)
# ========Lasso回归========
model = Lasso(alpha=0.01) # 调节alpha可以实现对拟合的程度
model_LassoCV = LassoCV() # LassoCV自动调节alpha可以实现选择最佳的alpha。
model_LassoLareCV = LassoLarsCV() # LassoLarsCV自动调节alpha可以实现选择最佳的alpha
model.fit(X, y) # 线性回归建模
model_LassoCV.fit(X, y)
model_LassoLareCV.fit(X, y)
print('系数矩阵:\n',model.coef_)
print('线性回归模型:\n',model)
print('系数矩阵:\n',model_LassoCV.coef_)
print('线性回归模型:\n',model_LassoCV)
print('系数矩阵:\n',model_LassoLareCV.coef_)
print('线性回归模型:\n',model_LassoLareCV)
print('最佳的alpha:',model_LassoCV.alpha_)
print('最佳的alpha:',model_LassoLareCV.alpha_) # 只有在使用LassoCV、LassoLarsCV时才有效
# 使用模型预测
predicted = model.predict(X)
#predicted = model_LassoCV.predict(X)
#predicted = model_LassoLareCV.predict(X)
print (predicted)
# 绘制散点图 参数:x横轴 y纵轴
plt.scatter(X, y, marker='x')
plt.plot(X, predicted,c='r')
# 绘制x轴和y轴坐标
plt.xlabel("x")
plt.ylabel("y")
# 显示图形
plt.title("Lasso regression")
plt.show()
官方API
Ouptut:
3. sklearn中的岭回归
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge,RidgeCV # Ridge岭回归,RidgeCV带有广义交叉验证的岭回归
# ##岭回归
#
#paras:
# alpha:float|array-like,形状:(n_targets),正则化强度:必须为正浮点数;正则化改善了问题的条件并减少了估计的方差。 较大的值指定较强的正则化
# copy_X:boolean,是否覆盖原数据
# fit_intercept:boolean,是否适用模型的截距
# max_iter:int,可选,共轭梯度求解器的最大迭代次数
# normalize:boolean,可选,默认False,如果为真,则回归X将在回归之前被归一化。
# 当fit_intercept设置为False时,将忽略此参数。 当回归量归一化时,注意到这使得超参数学习更加鲁棒,并且几乎不依赖于样本的数量。 相同的属性对标准化数据无效。
# 然而,如果你想标准化,请在调用normalize = False训练估计器之前,使用preprocessing.StandardScaler处理数据。
# tol:float,解的精度
# random_state:int seed,RandomState|None,默认为None,伪随机数生成器的种子,混洗数据时使用
# solver : {‘auto’, ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’}
#
# attributes:
# coef_:array,形状(n_features)|(n_targets,n_features),参数向量(在损失函数中为W)
# intercept_:float|array,形状(n_targets)
# n_iter_:int|array-like,形状(n_targets)
#
# methods:
# decision_function(* args,**kwargs)DEPRECATED:将在0.19中删除。
# fit(X,y [,sample_weight])Fit Ridge回归模型
# get_params([deep])获取此估计器的参数。
# predict(X)使用线性模型进行预测
# score(X,y [,sample_weight])返回预测的确定系数R2R2。
# set_params(**params)设置此估计器的参数
# 样本数据集,第一列为x,第二列为y,在x和y之间建立回归模型
data=[
[0.067732,3.176513],[0.427810,3.816464],[0.995731,4.550095],[0.738336,4.256571],[0.981083,4.560815],
[0.526171,3.929515],[0.378887,3.526170],[0.033859,3.156393],[0.132791,3.110301],[0.138306,3.149813],
[0.247809,3.476346],[0.648270,4.119688],[0.731209,4.282233],[0.236833,3.486582],[0.969788,4.655492],
[0.607492,3.965162],[0.358622,3.514900],[0.147846,3.125947],[0.637820,4.094115],[0.230372,3.476039],
[0.070237,3.210610],[0.067154,3.190612],[0.925577,4.631504],[0.717733,4.295890],[0.015371,3.085028],
[0.335070,3.448080],[0.040486,3.167440],[0.212575,3.364266],[0.617218,3.993482],[0.541196,3.891471]
]
#生成X和y矩阵
dataMat = np.array(data)
X = dataMat[:,0:1] # 变量x
y = dataMat[:,1] #变量y
# ========岭回归========
model = Ridge(alpha=0.5)
model = RidgeCV(alphas=[0.1, 1.0, 10.0]) # 通过RidgeCV可以设置多个参数值,算法使用交叉验证获取最佳参数值
model.fit(X, y) # 线性回归建模
print('系数矩阵:\n',model.coef_)
print('线性回归模型:\n',model)
# print('交叉验证最佳alpha值',model.alpha_) # 只有在使用RidgeCV算法时才有效
# 使用模型预测
predicted = model.predict(X)
# 绘制散点图 参数:x横轴 y纵轴
plt.scatter(X, y, marker='x')
plt.plot(X, predicted,c='r')
# 绘制x轴和y轴坐标
plt.xlabel("x")
plt.ylabel("y")
# 显示图形
plt.title("RidgeRegression")
plt.show()
output:
官方API
python机器学习库sklearn——岭回归(Ridge、RidgeCV)(L2正则化)