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



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

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

  • 相关阅读:
    2.Android之按钮Button和编辑框EditText学习
    《DSP using MATLAB》Problem 3.8
    《DSP using MATLAB》Problem 3.7
    《DSP using MATLAB》Problem 3.6
    《DSP using MATLAB》Problem 3.5
    《DSP using MATLAB》Problem 3.4
    《DSP using MATLAB》Problem 3.3
    《DSP using MATLAB》Problem 3.2
    《DSP using MATLAB》Problem 3.1
    《DSP using MATLAB》Problem 2.20
  • 原文地址:https://www.cnblogs.com/nickchen121/p/11686739.html
Copyright © 2020-2023  润新知