首页 > 其他分享 >sklearn.linear_model.LogisticRegression-逻辑回归分类器

sklearn.linear_model.LogisticRegression-逻辑回归分类器

时间:2023-04-12 21:35:04浏览次数:39  
标签:LogisticRegression linear 分类器 train l2 l1 test LR classifier

语法格式

class sklearn.linear_model.LogisticRegression(penalty='l2'*dual=Falsetol=0.0001C=1.0fit_intercept=Trueintercept_scaling=1class_weight=Nonerandom_state=Nonesolver='lbfgs'max_iter=100multi_class='auto'verbose=0warm_start=Falsen_jobs=Nonel1_ratio=None)

常用参数解释:

  • penalty: 指定正则项,也称惩罚项,接受"l1", "l2","elasticnet"(添加"l1""l2"罚分), "None"(不添加罚分)。默认为"l2"
  • solver: 在逻辑回归损失函数的优化问题中使用的算法,接受‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’, default="lbfgs"。对于小数据集,选择"liblinear"合适,对于大数据集,选择"sag" "saga" 更快;对于多类问题,仅"newton-cg""sag", "saga""lbfgs"处理多项损失;"liblinear"则仅限于 one-versus-rest 方案;‘newton-cholesky’对于n_samples >> n_features的情况是一个很好的选择,特别是对于具有稀有类别的one-hot encoded分类特征,它仅限于二元分类和多类分类的one-versus-rest reduction。注:算法的选择取决于所选择的penalty。"liblinear""saga"支持"l1""newton-cg", "sag","liblinear","saga""newton-cholesky""lbfgs"支持"l2""saga"支持"elasticnet";"newton-cg", "sag","saga","newton-cholesky""lbfgs"支持“None”。只有在具有大致相同scale的特征上,“sag”“saga”才能实现快速收敛。
  • dual: 接受布尔值,表示是否选择对偶。默认为False。dual公式仅适用于使用 liblinearl2惩罚选项。当n_samples > n_features时选择dual=False更优。
  • tol: 接受float, default=1e-4。表示迭代终止的误差阈值。
  • C: float,表示正则化系数的倒数。 default=1.0,表示损失函数与正则项的比例为1:1。C值越小,表明正则化越强。
  • random_state: 接受int, RandomState instance, default=None,用来设置随机数种子。当 solver == "sag", "saga"或"liblinear"时,使用此参数来洗牌数据。

代码示例

penalty和C

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt

#导入数据
mydata = load_breast_cancer()
X = mydata.data
print(X.shape)
y = mydata.target
print(y.sum())

#选择训练集和测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=100,stratify=y)
print(y_test.sum())

#使用逻辑回归模型进行二分类
#L1正则化
LR_classifier_l1 = LogisticRegression(penalty="l1",solver="liblinear",random_state=200,max_iter=1000)
LR_classifier_l1 = LR_classifier_l1.fit(X_train,y_train)
print(LR_classifier_l1.coef_) #查看每个特征对应的参数
print((LR_classifier_l1.coef_ != 0).sum(axis=1)) #特征不为0的数目
#L2正则化,并确实合适的C值
LR_train_L2 = []
LR_test_L2 = []
for i in np.linspace(0.05,1.5,19):
    LR_classifier_l2 = LogisticRegression(penalty="l2",solver="liblinear",random_state=200,C=i,max_iter=1000)
    LR_classifier_l2 = LR_classifier_l2.fit(X_train,y_train)
    LR_classifier_l2.coef_ #查看每个特征对应的参数
    (LR_classifier_l2.coef_ != 0).sum(axis=1) #特征不为0的数目
    LR_train_L2.append(accuracy_score(LR_classifier_l2.predict(X_train),y_train))
    LR_test_L2.append(accuracy_score(LR_classifier_l2.predict(X_test),y_test))

graph = [LR_train_L2,LR_test_L2]
label = ["LR_train_L2","LR_test_L2"]
color = ["black","red"]
plt.figure(figsize=(5,5))
for i in range(len(graph)):
    plt.plot(np.linspace(0.05,2,19),graph[i],color[i],label=label[i])
plt.legend(loc=2)
plt.show()

输出结果

(569, 30)
357
107
[[ 6.14368826  0.03201005 -0.43422785 -0.00929713  0.          0.
   0.          0.          0.          0.          0.          0.
   0.3325014  -0.06415746  0.          0.          0.          0.
   0.          0.          0.         -0.27739672 -0.138606   -0.02189744
   0.          0.         -1.20617611  0.          0.          0.        ]]
[10]

从上图可以看到,随着C值的增大,模型在训练集上的准确率呈逐渐增高趋势,但模型在测试集上则是先增高再下降,下降趋势的出现表明模型出现了过拟合。所以,C值应该选在0.8附近较合适。

标签:LogisticRegression,linear,分类器,train,l2,l1,test,LR,classifier
From: https://www.cnblogs.com/chaimy/p/17259901.html

相关文章

  • Java语言在Spark3.2.4集群中使用Spark MLlib库完成朴素贝叶斯分类器
    一、贝叶斯定理贝叶斯定理是关于随机事件A和B的条件概率,生活中,我们可能很容易知道P(A|B),但是我需要求解P(B|A),学习了贝叶斯定理,就可以解决这类问题,计算公式如下:  P(A)是A的先验概率P(B)是B的先验概率P(A|B)是A的后验概率(已经知道B发生过了)P(B|A)是B的后验概率(已经知道A发生过了)二......
  • UVa 457 Linear Cellular Automata (water ver.)
    457-LinearCellularAutomataTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=398AbiologistisexperimentingwithDNAmodificationofbacterialcolonies......
  • CMPSC311 mdadm Linear Device
    Assignment#4–mdadmLinearDevice(Caching)CMPSC311-IntroductiontoSystemsProgrammingFall2021-Prof.AghayevDuedate:April9,2023(11:59PM)ESTYoujustcompletedimplementingmdadmanditisworking.Thesoftwareengineerswhoplantobuild......
  • 现代计算机图形学——P1-2. Review of Linear Algebra
    (自用笔记)P1.(虚假的P1)计算机图形学、其研究内容及其相关领域与学科P1.(真正的P1)OverviewofComputerGraphicsP2.ReviewofLinearAlgebraP1计算机图形学——是研究怎样用计算机输入、生成(处理)、存储、显示、输出图形的一门学科。构成图形的要素:1.几何要素——形......
  • LinearLayout增加divider分割线
    在android3.0及后面的版本在LinearLayout里增加了个分割线android:divider="@drawable/shape"<!--分割线图片-->android:showDividers="middle|beginning|end"<!--分割线位置-->分割线如果是图片那就直接使用图片就行,如果要使用颜色就必须使用shape来显......
  • python机器学习案例系列教程——文档分类器,朴素贝叶斯分类器,费舍尔分类器
    全栈工程师开发手册(作者:栾鹏)python数据挖掘系列教程github地址:https://github.com/626626cdllp/data-mining/tree/master/Bayes贝叶斯分类过程概述:首先有一批已知分类的数据集。对每个输入对象提取特征,根据输入对象的特征属性和输入对象的所属分类,计算分类与特征属性之间的概率......
  • MIT Linear Algebra
    MITLinearAlgebra:按照列的方式进行多维向量的线性组合而不是用对应行和列的各元素的乘积和;......
  • Ceres 中的线性求解器类型(linear_solver_type)
    CeresSolver中的线性求解器类型(linear_solver_type)有多个选项,包括:DENSE_QR:使用稠密QR分解方法求解线性方程组。适用于内存足够的小规模问题,求解速度较快。DENSE_SCHUR:......
  • Tensflow & Numpy to implement Linear Regresssion and Logistic Regression
    OptionalLab-NeuronsandLayers¶Inthislabwewillexploretheinnerworkingsofneurons/unitsandlayers.Inparticular,thelabwilldrawparallelstot......
  • Python互联网大数据爬虫的武汉市二手房价格数据采集分析:Linear Regression模型、XGBoo
    全文链接:http://tecdat.cn/?p=31958原文出处:拓端数据部落公众号分析师:YanLiu我国有大量的资金都流入了房地产行业,同时与其他行业有着千丝万缕的联系,可以说房地产行业对......