zoukankan      html  css  js  c++  java
  • sklearn--回归

    一.线性回归

    LinearRegression类就是我们平时所说的普通线性回归,它的损失函数如下所示:
    scikit-learn(sklearn)线性回归算法类库介绍
    对于这个损失函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法,而scikit-learn中的LinearRegression类使用的是最小二乘法。通过最小二乘法,可以解出线性回归系数θ为:scikit-learn(sklearn)线性回归算法类库介绍
    验证方法:LinearRegression类并没有用到交叉验证之类的验证方法,需要我们自己把数据集分成训练集和测试集,然后进行训练优化。
    使用场景:一般来说,只要我们觉得数据有线性关系,LinearRegression类就是我们的首选。如果发现拟合或者预测的不好,再考虑用其它线性回归类库。
    from sklearn.linear_model import LinearRegression
    lr=LinearRegression()
    lr.fit(train_x,train_y)
    print lr.intercept_
    print lr.coef_
    

    二.岭回归

    由于LinearRegression没有考虑过拟合的问题,有可能导致泛化能力较差,这时损失函数可以加入正则化项,如果加入的是L2范数的正则化项,就是Ridge回归的损失函数,如下所示:
    scikit-learn(sklearn)线性回归算法类库介绍
    其中α是常数系数,需要进行调优,scikit-learn(sklearn)线性回归算法类库介绍是L2范数。
    Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数(是一种缩放的模型),使得模型相对而言比较稳定,不至于过拟合。
    对于这个损失函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法,而scikit-learn中的Ridge类使用的是最小二乘法。通过最小二乘法,可以解出线性回归系数θ为:
    scikit-learn(sklearn)线性回归算法类库介绍
    其中E是单位矩阵。
    验证方法:Ridge类并没有用到交叉验证之类的验证方法,需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数α,然后进行训练优化。
    使用场景:一般来说,只要我们觉得数据有线性关系,并且使用LinearRegression类拟合的不是特别好,需要正则化时,可以考虑用Ridge类。但是这个类最大的缺点是每次我们要自己指定一个超参数α,然后自己评估α的好坏,比较麻烦,一般都会使用下面将会讲到的RidgeCV类来跑Ridge回归,不推荐直接用这个Ridge类,除非你只是为了学习Ridge回归。
    from sklearn.linear_model import Ridge
    from sklearn.model_selection import cross_val_score
    alphas=np.logspace(-3,2,50)
    test_scores =[]
    for alpha in alphas:
        clf=Ridge(alpha)
        test_score=np.sqrt(-cross_val_score(clf,X_train,Y_train,cv=10,scoring='neg_mean_squared_error'))
        test_scores.append(np.mean(test_score))
    plt.plot(alphas,test_scores)
    

      RidgeCV类的损失函数和损失函数的优化方法与Ridge类完全相同,区别在于验证方法。

    验证方法:RidgeCV类对超参数α使用了交叉验证,来帮助我们选择一个合适的α值。在初始化RidgeCV类时,我们可以提供一组备选的α值。RidgeCV类会帮我们选择一个合适的α值,免去了我们自己去一轮轮筛选α值的苦恼。
    from sklearn.linear_model import RidgeCV
    # 在初始化RidgeCV类时, 提供一组备选的α值, RidgeCV类会帮我们选择一个合适的α值.
    ridgecv = RidgeCV(alphas=[0.01, 0.1, 0.5, 1, 3, 5, 7, 10, 20, 100], cv=5)
    # 拟合训练集
    ridgecv.fit(train_X, train_Y)
    # 打印最优的α值
    print "最优的alpha值: ", ridgecv.alpha_
    # 打印模型的系数
    print ridgecv.intercept_
    print ridgecv.coef_
    

     三.lasso回归

    线性回归的L1正则化通常称为Lasso回归,它和Ridge回归的区别是在损失函数上增加的是L1正则化项,而不是L2正则化项。L1正则化项也有一个常数系数α来调节损失函数的均方差项和正则化项的权重,具体的Lasso回归的损失函数如下所示:
    scikit-learn(sklearn)线性回归算法类库介绍
    其中m是样本个数,α是常数系数,需要进行调优。scikit-learn(sklearn)线性回归算法类库介绍是L1范数。
    Lasso回归可以使得一些特征的系数变小,甚至一些绝对值非常小的系数直接变为0,增强模型的泛化能力

    Lasso回归的损失函数的优化方法常用的有两种,分别是坐标轴下降法和最小角回归法。Lasso类采用的是坐标轴下降法,后面讲到的LassoLars类采用的是最小角回归法

    from sklearn.linear_model import LassoCV
    # 在初始化LassoCV类时, 提供一组备选的α值, LassoCV类会帮我们选择一个合适的α值.
    lassocv = LassoCV(alphas=[0.01, 0.1, 0.5, 1, 3, 5, 7, 10, 20, 100], cv=5)
    # 拟合训练集
    lassocv.fit(train_X, train_Y.values.ravel())
    # 打印最优的α值
    print "最优的alpha值: ", lassocv.alpha_
    # 打印模型的系数
    print lassocv.intercept_
    print lassocv.coef_
    

     三.多项式回归

    当我们拟合的是一个曲线的时候我们就不能只考虑线性拟合了,我们可以考虑多项式拟合,通过加入高次的特征来来得到总的特征样本,然后在进行线性的拟合

    #多项式拟合
    from sklearn.preprocessing import PolynomialFeatures
    poly_features = PolynomialFeatures(degree=5, include_bias=False)#其中的degree就是指的最高次项的个数
    X_poly = poly_features.fit_transform(X)
    print(X_poly.shape)
    lin_reg = LinearRegression()
    lin_reg.fit(X_poly, y)
    print(lin_reg.intercept_, lin_reg.coef_)
    

     四.逻辑回归

    逻辑回归之所以被分为线性回归的一种,只因为其本质也是线性回归,只不过得到的线性相加求和之后加上了sigmod函数将其二值化

    from sklearn.linear_model import LogiticRegression
    lr==Logiticregression()
    lr.fit(x,y)
    
     
     
     
     
     
  • 相关阅读:
    WCF和SOA的简介
    .NET 反射应用
    ASP.NET---如何使用web api创建web服务
    获得N位数字字母随机组合
    git的初步使用
    js贪吃蛇
    python多线程
    2013-12-13
    2012-12-12
    2013-12-5
  • 原文地址:https://www.cnblogs.com/yskn/p/9786725.html
Copyright © 2011-2022 走看看