线性模型

常用的线性模型有线性回归、岭回归、套索回归、逻辑回归和线性 SVM 等。

线性回归
原理

线性回归(linear regression)是一种回归分析技术。线性回归试图学习到一个线性模型以尽可能准确地预测实值输出标记。通过在数据集上建立线性模型,建立代价函数(loss function),最终以优化代价函数为目标确定模型参数w和b,从而得到模型用以后续的预测。

具体用法
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression


def linear_regression1():
    # n_features: 特征个数 = n_informative() + n_redundant + n_repeated
    # n_informative:多信息特征的个数
    # n_redundant:冗余信息,informative特征的随机线性组合
    # n_repeated :重复信息,随机提取n_informative和n_redundant 特征
    # n_classes:分类类别
    # n_clusters_per_class :某一个类别是由几个cluster构成的
    X, y = make_regression(n_samples=200, n_features=2, n_informative=2, noise=20, random_state=3)
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)
    lr = LinearRegression().fit(X_train, y_train)
    print('--------------')
    print('lr.coef_:{}'.format(lr.coef_[:]))
    print('lr.intercept_:{}'.format(lr.intercept_))
    print('----------')
    print('测试数据集得分:{:.2f}'.format(lr.score(X_test, y_test)))
    print('-------------')

运行结果

--------------
lr.coef_:[97.41730944 54.49354732]
lr.intercept_:-0.05991175060145615
----------
测试数据集得分:0.97
-------------
岭回归
原理

岭回归是一种能够避免过拟合的线性模型。在岭回归中,模型会保留所有的特征变量,但是会减小特征变量的系数值,让特征变量对预测结果的影响变小,在岭回归中是通过改变其 alpha 参数来控制减小特征变量系数的程度。这种通过保留全部特征变量,只是降低特征变量的系数值来避免过拟合的方法,我们称之为 L2 正则化。

具体用法
from sklearn.linear_model import Ridge
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split


def linear_regression1():
    # 糖尿病情数据集
    X, y = load_diabetes().data, load_diabetes().target
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)
    # alpha 越大,则越降低过拟合程度
    ridge = Ridge(alpha=0.5).fit(X_train, y_train)
    print('--------------')
    print('ridge.coef_:{}'.format(ridge.coef_[:]))
    print('ridge.intercept_:{}'.format(ridge.intercept_))
    print('----------')
    print('训练数据集得分:{:.2f}'.format(ridge.score(X_train, y_train)))
    print('测试数据集得分:{:.2f}'.format(ridge.score(X_test, y_test)))

运行结果

--------------
ridge.coef_:[  34.51271596 -128.2391615   367.7570263   266.8969371   -27.64762407
  -57.6591586  -162.73744155  105.62127781  281.34740313  125.36349347]
ridge.intercept_:152.514304568997
----------
训练数据集得分:0.48
测试数据集得分:0.47
套索回归
原理

套索回归也会将系数限制在非常接近 0 的范围内,但它进行限制的方式稍微有点不同,我们称之为 L1 正则化。L1 正则化会导致在使用套索回归的时候,有一部分特征的系数会正好等于 0 。也就是说,有一些特征在使用套索回归的时候会彻底被模型忽略掉,这也可以看成是模型对于特征进行自动选择的一种方式。把一些特征忽略掉,从而突出体现模型中最重要的那些特征。

具体用法
from sklearn.linear_model import Lasso
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
import numpy as np


def linear_regression1():
    # 糖尿病情数据集
    X, y = load_diabetes().data, load_diabetes().target
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)
    # alpha 越大,则使用特征数越少
    lasso = Lasso(alpha=0.1, max_iter=100000).fit(X_train, y_train)
    print('--------------')
    print('lasso.coef_:{}'.format(lasso.coef_[:]))
    print('lasso.intercept_:{}'.format(lasso.intercept_))
    print('----------')
    print('训练数据集得分:{:.2f}'.format(lasso.score(X_train, y_train)))
    print('测试数据集得分:{:.2f}'.format(lasso.score(X_test, y_test)))
    print('套索回归使用的特征数:{}'.format(np.sum(lasso.coef_ != 0)))

运行结果

--------------
lasso.coef_:[   0.         -181.40911617  537.71961152  355.19720303 -105.43471481
   -0.         -198.99829878    0.          440.25133426   48.25573121]
lasso.intercept_:152.43690667906043
----------
训练数据集得分:0.52
测试数据集得分:0.48
套索回归使用的特征数:7
弹性网模型
原理

弹性网模型(ElasticNet)综合了岭回归和套索回归的惩罚因子。在实践中这个模型的效果是做好的,然而代价是用户需要调整量两个参数,一个是 L1 正则化参数,另一个是 L2 正则化参数。

具体用法
from sklearn.linear_model import ElasticNet
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
import numpy as np


def linear_regression1():
    # 糖尿病情数据集
    X, y = load_diabetes().data, load_diabetes().target
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)
    elastic_net = ElasticNet(alpha=1, l1_ratio=1, max_iter=100000).fit(X_train, y_train)
    print('--------------')
    print('elastic_net.coef_:{}'.format(elastic_net.coef_[:]))
    print('elastic_net.intercept_:{}'.format(elastic_net.intercept_))
    print('----------')
    print('训练数据集得分:{:.2f}'.format(elastic_net.score(X_train, y_train)))
    print('测试数据集得分:{:.2f}'.format(elastic_net.score(X_test, y_test)))
    print('弹性网回归使用的特征数:{}'.format(np.sum(elastic_net.coef_ != 0)))

运行结果

--------------
elastic_net.coef_:[  0.          -0.         384.73421807  72.69325545   0.
   0.          -0.           0.         247.88881314   0.        ]
elastic_net.intercept_:152.6882498532522
----------
训练数据集得分:0.36
测试数据集得分:0.37
弹性网回归使用的特征数:3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值