02-14 scikit-learn库之逻辑回归

目录

  • scikit-learn库之逻辑回归
  • 一、LogisticRegression
    • 1.1 使用场景
    • 1.2 代码
    • 1.3 参数详解
    • 1.4 属性
    • 1.5 方法
  • 二、LogisticRegressionCV
  • 三、logistic_regression_path

更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/

scikit-learn库之逻辑回归

相比较线性回归,由于逻辑回归的变种较少,因此scikit-learn库中的逻辑回归类就比较少,只有LogisticRegressionLogisticRegressionCVlogistic_regression_path

接下来将会讨论这三者的区别,由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model ,需要注意逻辑回归和线性回归都在sklearn.linear_model包中。

一、LogisticRegression

1.1 使用场景

逻辑回归一般使用于分类场景,可以使用参数让普通的二元分类问题变成多分类问题。

1.2 代码

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression

X, y = load_iris(return_X_y=True)
clf = LogisticRegression(random_state=0, solver='lbfgs', max_iter=100,
                         multi_class='multinomial')
# 由于迭代更新次数太少,算法无法收敛,报错
clf.fit(X, y)
/Applications/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:758: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
  "of iterations.", ConvergenceWarning)

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=100, multi_class='multinomial',
          n_jobs=None, penalty='l2', random_state=0, solver='lbfgs',
          tol=0.0001, verbose=0, warm_start=False)
clf = LogisticRegression(random_state=0, solver='lbfgs', max_iter=1000,
                         multi_class='multinomial')
clf.fit(X, y)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=1000, multi_class='multinomial',
          n_jobs=None, penalty='l2', random_state=0, solver='lbfgs',
          tol=0.0001, verbose=0, warm_start=False)
clf.predict(X[:2, :])
array([0, 0])
clf.predict_proba(X[:2, :])
array([[9.81579028e-01, 1.84209573e-02, 1.44796627e-08],
       [9.71349907e-01, 2.86500630e-02, 3.01442199e-08]])
clf.score(X, y)
0.9733333333333334

1.3 参数详解

  • penalty:正则化,str类型。由于逻辑回归的目标函数是基于线性回归而来,因此该正则化参数可以选择‘l1‘和‘l2‘,分别对应L1正则化和L2正则化,两则作用和线性回归的正则化项作用类似。默认为‘l2‘。
  • dual:对偶或原始方法,bool类型。只有满足solver=‘liblinear‘并且penalty=‘l2‘时才可使用对偶方法,即设置dual=True,当样本数大于特征数的时候,通常设置为False。默认为False。
  • tol:停止求解的标准,float类型。求解到多少的时候认为求出最优解,停止求解。默认为0.0001。
  • c:正则化系数\(\lambda\)的倒数,float类型。数值越小正则化越强。默认为1.0。
  • fit_intercept:截距(偏置单元),bool类型。是否存在截距或者偏置单元。默认为True。
  • intercept_scaling:扩展截距,float类型。只有满足solver=‘liblinear‘并且fit_intercept=True时才有用。默认为1。
  • class_weight:类别权重,dict类型或str类型。对于二元分类问题可以使用class_weight={0:0.9,1:0.1},表示0类别权重为0.9,1类别权重为0.1,str类型即为‘balanced‘,模型将根据训练集自动修改不同类别的权重。默认为None。通常解决下述两个问题:
    • 不同类别数据量不平衡问题,如0类有1个数据,1类有999个数据,如果不考虑权重问题,则模型基本会把所有的未来新样本预测为1类,因此则可以手动适当增加0类的权重,也可以使用class_weight=‘balanced‘自动提高0类的权重。
    • 将癌症人士分类为健康人士的会有很大的风险,有时候宁愿让健康人士被分类为癌症认识,然后再通过人工甄别他们的健康情况,通常这个时候可以适当提高癌症人士的权重。
  • random_state:随机数种子,int类型。仅在solve={‘sag‘,‘liblinear‘}时有用。默认为None。
  • solver:优化算法选择,str类型。共有{‘newton-cg‘,‘lbfgs‘,‘sag‘,‘liblinear‘,‘saga‘}五种选择,当penalty=‘l1‘时,目标函数将会变得连续不可导,因此只能选择‘liblinear‘,当penalty=‘l2‘时,则可以选择{‘newton-cg‘,‘lbfgs‘,‘sag‘,‘liblinear‘,‘saga‘},默认为‘liblinear‘。其中‘liblinear‘是坐标轴下降法,适合小数据集;‘newton-cg‘是牛顿法;‘lbfgs‘是拟牛顿法;‘sag‘是随机梯度下降法,适合大数据集。默认为‘liblinear‘。
  • max_iter:迭代次数,int类型。算法迭代次数,算法迭代到一定次数会收敛。只有solver={‘newton-cg‘,‘sag‘,‘lbfgs‘}才有用。默认为100。
  • multi_class:多分类,str类型。当solver=‘liblinear‘时,只能选择‘ovr‘,当solver={‘newton-cg‘,‘lbfgs‘,‘sag‘,‘saga‘}时,可以选择‘ovr‘或‘multinomial‘。‘ovr‘相对简单,速度快,但是分类效果差;‘multinomial‘分类速度慢,但是分类效果好。默认为‘ovr‘。
  • verbose:日志冗长度,int类型。verbose=0,不输出训练过程;verbose=1,输出部分训练过程;verbose>1,输出所有的训练过程。默认为0。
  • warm_start:热启动,bool类型。bool=True,每次初始化参数时,使用上一次的fit()拟合后的结果初始化。默认为False。
  • n_jobs:并行数。n_jobs=1使用1个cpu运行程序;n_jobs=2,使用2个cpu运行程序;n_jobs=-1,使用所有cpu运行程序。默认为1。

1.4 属性

  • classes:array类型,训练集中所有类标签组成的列表。
  • coef:array类型,决策函数的系数,如果有多分类就会是k行的系数,其中k是训练集的类别数。
  • intercept_:array类型,截距,二分类就只有一个,多分类就会有n个。
  • n_iter_:array类型,实际上迭代次数,即达到收敛时的迭代次数。

1.5 方法

  • decision_functino(X):预测样本X的置信度分数。
  • densify():将稀疏矩阵改成稠密矩阵。
  • fit(X,y,sample_weight=None):把数据放入模型中训练模型,其中sample_weight=None是array类型可以对训练集中实例添加权重,即对训练集中不同的数据增加不同的权重。
  • get_params([deep]):返回模型的参数,可以用于Pipeline中。
  • predict(X):预测样本X的分类类别。
  • predict_lot_proba(X):返回样本X在各个类别上对应的对数概率。
  • predict_proba(X):返回样本X在各个类别上对应的概率。
  • score(X,y[,sample_weight]):基于报告决定系数\(R^2\)评估模型。
  • set_prams(**params):创建模型参数。
  • sparsify():将系数矩阵转换为稀疏矩阵,调用该方法后再选择coef_属性便是稀疏矩阵。
  • sample_weight:样本权重参数。

二、LogisticRegressionCV

LogisticRegressionCV模型在目标函数和优化方式类似于LogisticRegression,但是可以自己手动输入10组、100组参数\(C\),该模型会通过交叉验证后给你这组参数中最优模型。

三、logistic_regression_path

logistic_regression_path模型比较特殊,它拟合数据后,不能直接来做预测,只能为拟合数据选择合适逻辑回归的系数和正则化系数,一般用在模型选择的时候。由于不经常使用这个类,所以此处不多赘述。

原文地址:https://www.cnblogs.com/nickchen121/p/11686739.html

时间: 2024-10-20 12:01:34

02-14 scikit-learn库之逻辑回归的相关文章

python sklearn库实现逻辑回归的实例代码

Sklearn简介 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression).降维(Dimensionality Reduction).分类(Classfication).聚类(Clustering)等方法.当我们面临机器学习问题时,便可根据下图来选择相应的方法. Sklearn具有以下特点: 简单高效的数据挖掘和数据分析工具 让每个人能够在复杂环境中重复使用 建立NumPy.Scipy.MatPlotLib之上 代

Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的垂直搜索引擎,专门为用户提供团购.优惠券的检索:同时存在一个通用的搜索引擎,比如百度,通用搜索引擎希望能够识别出一个Query是否具有O2O检索意图,如果有则调用O2O垂直搜索引擎,获取结果作为通用搜索引擎的结果补充. 我们的目的是学习出一个分类器(classifier),分类器可以理解为一个函数,

逻辑回归--参数解释+数据特征不独热编码+训练数据分布可视话

#-*- coding: utf-8 -*- ''' 逻辑回归参数: penalty:惩罚项,str类型,可选参数为l1和l2,默认为l2.用于指定惩罚项中使用的规范.newton-cg.sag和lbfgs求解算法只支持L2规范.L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布,所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit),但是如果要说是不是加了约束就会好,这个没有人能回答,只能说,加约束的情况下,理论上应该可以获得泛化能力更强的结果. du

朴素贝叶斯和逻辑回归分类

朴素贝叶斯 用p1(x, y)表示(x, y)属于类别1的概率,P2(x, y)表示(x, y)属于类别2的概率: 如果p(c1|x, y) > P(c2|x, y), 那么类别为1 如果p(c1|x, y) < P2(c2|x, y), 那么类别为2 根据贝叶斯公式: p(c|x, y) = (p(x, y|c) * p(c)) / p(x, y) (x, y)表示要分类的特征向量, c表示类别 因为p(x, y),对不同类别的数值是一样的,只需计算p(x, y|c) 和 p(c) p(c)

机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 这节学习的是逻辑回归(Logistic Regression),也算进入了比较正统的机器学习算法.啥叫正统呢?我概念里面机器学习算法一般是这样一个步骤: 1)对于一个问题,我们用数学语言来描述它,然后建立一个模型,例如回归模型或者分类模型等

逻辑回归--数据独热编码+数据结果可视化

#-*- coding: utf-8 -*- ''' 在数据处理和特征工程中,经常会遇到类型数据,如性别分为[男,女](暂不考虑其他....),手机运营商分为[移动,联通,电信]等,我们通常将其转为数值带入模型,如[0,1], [-1,0,1]等,但模型往往默认为连续型数值进行处理. 独热编码便是解决这个问题,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效. 可以理解为对有m个取值的特征,经过独热编码处理后,转为m个二元特征(值只有

机器学习第一步——用逻辑回归及随机森林实现泰坦尼克号的生存预测

1.实验背景 本次实验是Kaggle上的一个入门比赛——Titanic: Machine Learning from Disaster.比赛选择了泰坦尼克号海难作为背景,并提供了样本数据及测试数据,要求我们根据样本数据内容建立一个预测模型,对于测试数据中每个人是否获救做个预测.样本数据包括891条乘客信息及获救情况,测试数据有418条乘客信息.样本数据的样例如下: Passenger:乘客唯一识别id Survived:是否存活,0为否,1为是 Pclass:船舱等级,1.2.3等 Name:姓

Iris花逻辑回归与实现

Iris花的分类是经典的逻辑回归的代表:但是其代码中包含了大量的python库的核心处理模式,这篇文章就是剖析python代码的文章. 1 #取用下标为2,3的两个feture,分别是花的宽度和长度: 2 #第一个维度取":"代表着所有行,第二个维度代表列范围,这个参数模式其实和reshape很像 3 X = iris["data"][:, (2,3)] 4 y = (iris["target"]==2).astype(np.int) #分类做了

逻辑回归原理小结

逻辑回归是一个分类算法,它可以处理二元分类以及多元分类.虽然它名字里面有"回归"两个字,却不是一个回归算法.那为什么有"回归"这个误导性的词呢?个人认为,虽然逻辑回归是分类模型,但是它的原理里面却残留着回归模型的影子,本文对逻辑回归原理做一个总结. 1. 从线性回归到逻辑回归 我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数\(\theta\),满足\(\mathbf{Y = X\theta}\).此时我们的Y是连续的,所以是回归模型.