sklearn-回归算法的学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Forlogen/article/details/85012313

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:官方API

  1. 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:官方API

Ouptut:
在这里插入图片描述
在这里插入图片描述

  1. 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()


在这里插入图片描述
在这里插入图片描述

参见:官方API

python机器学习库sklearn——岭回归(Ridge、RidgeCV)(L2正则化)

猜你喜欢

转载自blog.csdn.net/Forlogen/article/details/85012313