zoukankan      html  css  js  c++  java
  • 逻辑回归参数详解

    逻辑回归方法:

    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='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)

    可选参数:

    • penalty:正则化方式,可选择‘l1’, ‘l2’, ‘elasticnet’, ‘none’,默认'l2'

    • dual:是否选择对偶,当n_samples> n_features时,首选dual = False

    • tol:算法停止的误差条件,默认是0.0001

    • C:正则强度的倒数;必须为正浮点数,较小的值指定更强的正则化,默认为1.0

    • fit_intercept:是否应将常量(也称为偏差或截距)添加到决策函数。默认是True。

    • intercept_scaling:不常用

    • class_weight:对类别进行加权,可以使用字典形式加权,输入‘balanced’代表权重为类别频率,默认是"None"。

    • random_state:选择随机种子,打乱样本时候指定

    • solver:指定优化器类型,可选‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’

      具体的优化方法参考:机器学习中的优化算法!

    • max_iter:算法收敛的最大迭代次数,默认100。

    • multi_class:不常用。

    • verbose:对于liblinear和lbfgs,求解器将verbose设置为任何正数以表示详细程度。

    • warm_start:不常用。

    • n_jobs:使用内核数。

    • l1_ratio:弹性网络参数,其中0 <= l1_ratio <=1。仅当penalty=“ elasticnet”时使用。

    返回标签:

    • classes_:返回的类别标签
    • coef_:系数
    • intercept_:截距项
    • n_iter_:所有类的迭代次数

    代码展示

    # -*- coding: utf-8 -*-
    """
    Created on Tue Aug 11 10:12:48 2020
    
    @author: Admin
    """
    
    # 引入数据
    from sklearn import datasets
    import numpy as np
    
    iris = datasets.load_iris()
    X = iris.data[:,[2,3]]
    y = iris.target
    print("Class labels:",np.unique(y))  #打印分类类别的种类
    
    
    # 切分训练数据和测试数据
    from sklearn.model_selection import train_test_split
    ## 30%测试数据,70%训练数据,stratify=y表示训练数据和测试数据具有相同的类别比例
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1,stratify=y)
    
    
    from sklearn.preprocessing import StandardScaler
    
    sc = StandardScaler()
    ## 估算训练数据中的mu和sigma
    sc.fit(X_train)
    ## 使用训练数据中的mu和sigma对数据进行标准化
    X_train_std = sc.transform(X_train)
    X_test_std = sc.transform(X_test)
    
    ## 画出决策边界图(只有在2个特征才能画出来)
    import matplotlib.pyplot as plt
    %matplotlib inline
    from matplotlib.colors import ListedColormap
    
    def plot_decision_region(X,y,classifier,resolution=0.02):
        markers = ('s','x','o','^','v')
        colors = ('red','blue','lightgreen','gray','cyan')
        cmap = ListedColormap(colors[:len(np.unique(y))])
    
        # plot the decision surface
        x1_min,x1_max = X[:,0].min()-1,X[:,0].max()+1
        x2_min,x2_max = X[:,1].min()-1,X[:,1].max()+1
        xx1,xx2 = np.meshgrid(np.arange(x1_min,x1_max,resolution),
                             np.arange(x2_min,x2_max,resolution))
        Z = classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T)
        Z = Z.reshape(xx1.shape)
        plt.contourf(xx1,xx2,Z,alpha=0.3,cmap=cmap)
        plt.xlim(xx1.min(),xx1.max())
        plt.ylim(xx2.min(),xx2.max())
    
        # plot class samples
        for idx,cl in enumerate(np.unique(y)):
            plt.scatter(x=X[y==cl,0],
                       y = X[y==cl,1],
                       alpha=0.8,
                       c=colors[idx],
                       marker = markers[idx],
                       label=cl,
                       edgecolors='black')
    
    
    #逻辑回归   由于标签有三类,特征有2个,因此截距和系数也有三对     
    from sklearn.linear_model import LogisticRegression
    
    lr = LogisticRegression(C=100.0,random_state=1)
    lr.fit(X_train_std,y_train)
    print("Class:",lr.classes_)
    print("Coef:",lr.coef_)
    print("intercept",lr.intercept_)
    print("n_iter",lr.n_iter_)
    
    '''
    Class: [0 1 2]
    Coef: [[-5.61268224 -4.30718677]
     [ 2.40969576 -2.07325711]
     [ 9.51524418  5.39484899]]
    intercept [-5.8391281  -0.75730853 -9.21167569]
    n_iter [9]
    
    '''
    plot_decision_region(X_train_std,y_train,classifier=lr,resolution=0.02)
    plt.xlabel('petal length [standardized]')
    plt.ylabel('petal width [standardized]')
    plt.legend(loc='upper left')
    plt.show()
    
    
    # 预测
    ## 预测前三样本在各个类别的概率
    print("前三样本在各个类别的预测概率为:
    ",lr.predict_proba(X_test_std[:3,:]))
    print("
    ============================")
    ## 获得前三个样本的分类标签
    print("
    前三样本在各个类别的预测类别为:
    ",lr.predict(X_test_std[:3,:]))
    print("
    ============================")
    
    '''
    前三样本在各个类别的预测概率为:
     [[3.17983737e-08 1.44886616e-01 8.55113353e-01]
     [8.33962295e-01 1.66037705e-01 4.55557009e-12]
     [8.48762934e-01 1.51237066e-01 4.63166788e-13]]
    
    ============================
    
    前三样本在各个类别的预测类别为:
     [2 0 0]
    
    ============================
    
    '''

  • 相关阅读:
    整理+学习《骆昊-Java面试题全集(下)》
    整理+学习《骆昊-Java面试题全集(中)》
    Linux专家心目中的最佳Linux发行版有哪些?
    常用的Git Tips
    Python 3 加密简介
    LXD 2.0 系列(一):LXD 入门
    英特尔构建云集成编排工具
    Unix操作系统中UUCP知识详细讲解
    Windows 的 AD 域寄生于 Linux 机器
    Git秘籍:在 Git 中进行版本回退
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/13474417.html
Copyright © 2011-2022 走看看