Sklearn实现线性回归和逻辑回归

发布时间 2023-12-06 17:15:14作者: 木屐呀

 

Linear Regression

class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)

参数解释如下:

  • fit_intercept : 布尔值,是否使用偏置项,默认是 True。
  • normalize : 布尔值,是否启用归一化,默认是 False。当 fit_intercept 被置为 False 的时候,这个参数会被忽略。当该参数为 True 时,数据会被归一化处理。
  • copy_X : 布尔值,默认是 True,如果为 True,x 参数会被拷贝不会影响原来的值,否则会被复写。
  • n_jobs:数值或者布尔,如果设置了,则多核并行处理。

属性如下:

  • coef_:x 的权重系数大小
  • intercept_:偏置项大小

代码实现如下:

 1 from sklearn.linear_model import LinearRegression
 2  
 3 x_data = [
 4     [6000, 58],
 5     [9000, 77],
 6     [11000, 89],
 7     [15000, 54]
 8 ]
 9 y_data = [
10     30000, 55010, 73542, 63201
11 ]
12  
13 lr = LinearRegression()
14 lr.fit(x_data, y_data)
15 print('方程为:y={w1}x1+{w2}x2+{b}'.format(w1=round(lr.coef_[0], 2),
16                                        w2=round(lr.coef_[1], 2),
17                                        b=lr.intercept_))
18 x_test = [[12000, 60]]
19 print('贷款金额为:', lr.predict(x_test)[0])

运行结果:

在这里我们首先声明了 LinearRegression 对象,然后将数据整合成 x_data 和 y_data 的形式,然后通过调用 fit() 方法来对数据进行拟合。

拟合完毕之后,LinearRegression 的 coef_ 对象就是各个 x 变量的权重大小,即对应着 θ1,θ2,intercept_ 则是偏移量,对应着 θ0,这样我们就可以得到一个线性回归表达式了。

然后我们再调用 predict() 方法,将新的测试数据传入,便可以得到其预测结果,最终结果为 55484.34,即孙七的可贷款额度为 55484.34 元。

 

Logistic Regression

用 Sklearn 中的 API 来实现逻辑回归模型,使用的库为 LogisticRegression,其 API 如下:

1 class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’liblinear’, max_iter=100, multi_class=’ovr’, verbose=0, warm_start=False, n_jobs=1)

参数说明如下:

  • penalty:惩罚项,str 类型,可选参数为 l1 和 l2,默认为 l2。用于指定惩罚项中使用的规范。newton-cg、sag 和 lbfgs 求解算法只支持 L2 规范。L1G 规范假设的是模型的参数满足拉普拉斯分布,L2 假设的模型参数满足高斯分布,所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit),但是如果要说是不是加了约束就会好,这个没有人能回答,只能说,加约束的情况下,理论上应该可以获得泛化能力更强的结果。
  • dual:对偶或原始方法,bool 类型,默认为False。对偶方法只用在求解线性多核(liblinear)的 L2惩 罚项上。当样本数量 > 样本特征的时候,dual 通常设置为 False。
  • tol:停止求解的标准,float类型,默认为1e-4。就是求解到多少的时候,停止,认为已经求出最优解。
  • c:正则化系数 λ 的倒数,float 类型,默认为 1.0。必须是正浮点型数。像 SVM 一样,越小的数值表示越强的正则化。
  • fit_intercept:是否存在截距或偏差,bool 类型,默认为 True。
  • intercept_scaling:仅在正则化项为”liblinear”,且fit_intercept 设置为 True 时有用。float 类型,默认为 1。
  • class_weight:用于标示分类模型中各种类型的权重,可以是一个字典或者’balanced’字符串,默认为不输入,也就是不考虑权重,即为 None。如果选择输入的话,可以选择 balanced 让类库自己计算类型权重,或者自己输入各个类型的权重。举个例子,比如对于0,1的二元模型,我们可以定义 class_weight={0:0.9,1:0.1},这样类型0的权重为 90%,而类型 1 的权重为 10%。如果 class_weight选择 balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。
  • random_state:随机数种子,int类型,可选参数,默认为无,仅在正则化优化算法为 sag,liblinear时有用。
  • solver:优化算法选择参数,只有五个可选参数,即newton-cg, lbfgs, liblinear, sag, saga。默认为liblinear。solver 参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择,分别是:
    • liblinear:使用了开源的 liblinear 库实现,内部使用了坐标轴下降法来迭代优化损失函数。
    • lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
    • newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
    • sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
    • saga:线性收敛的随机优化算法的的变重。
  • max_iter:算法收敛最大迭代次数,int 类型,默认为10。仅在正则化优化算法为 newton-cg, sag 和 lbfgs 才有用,算法收敛的最大迭代次数。
  • multi_class:分类方式选择参数,str 类型,可选参数为 ovr 和 multinomial,默认为 ovr。ovr 即前面提到的one-vs-rest(OvR),而 multinomial 即前面提到的 many-vs-many(MvM)。如果是二元逻辑回归,ovr 和 multinomial 并没有任何区别,区别主要在多元逻辑回归上。
  • verbose:日志冗长度,int 类型。默认为 0。就是不输出训练过程,1 的时候偶尔输出结果,大于 1,对于每个子模型都输出。
  • warm_start:热启动参数,bool 类型。默认为 False。如果为 True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。
  • n_jobs:并行数。int 类型,默认为 1。1 的时候,用 CPU 的一个内核运行程序,2 的时候,用 CPU 的 2 个内核运行程序。为 -1 的时候,用所有 CPU 的内核运行程序。

属性说明如下:

  • coef_:斜率
  • intercept_:截距项

我们现在来解决上面的示例,代码如下:

 1 from sklearn.linear_model import LogisticRegression
 2  
 3 x_data = [
 4     [6000, 58],
 5     [9000, 77],
 6     [11000, 89],
 7     [15000, 54]
 8 ]
 9 y_data = [
10     0, 0, 1, 1
11 ]
12  
13 lr = LogisticRegression()
14 lr.fit(x_data, y_data)
15 x_test = [[12000, 60]]
16 print('Intercept', lr.intercept_)
17 print('Coef', lr.coef_)
18 print('款项是否可以立即到账', lr.predict(x_test)[0])

这里我们的 y_data 数据就变了,变成了是非判断,这里 0 代表“否”,1 代表“是”。这里做逻辑回归时使用了 LogisticRegression 对象,然后调用 fit() 方法进行拟合,拟合完毕之后,使用 [12000, 60] 这条数据作为输入,让模型输出它的预测值。

运行结果:

1 Intercept [-0.03142387]
2 Coef [[ 0.00603919 -0.72587703]]
3 款项是否可以立即到账 1

结果中输出了截距项和系数项,然后预测了是否可以立即到账,结果为 1,这表明孙七进行贷款,款项可以立即到账。