python之实战----逻辑回归战iris

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt  
import numpy as np  
from sklearn.model_selection import train_test_split   
from sklearn import datasets, linear_model
def laod_data():
    iris=datasets.load_iris()
    X_train=iris.data
    y_train=iris.target
    return train_test_split(X_train,y_train,
    test_size=0.25,random_state=0,stratify=y_train)#stratify分层
def test_LogisticRegression(*data):
    X_train,X_test,y_train,y_test=data
    regr=linear_model.LogisticRegression(solver='liblinear')
    regr.fit(X_train,y_train)
    print('Coefficients:%s, intercept %s'%(regr.coef_,regr.intercept_))
    print("Score:%.2f"%regr.score(X_test,y_test))
if __name__=='__main__':
    X_train,X_test,y_train,y_test=laod_data() 
    test_LogisticRegression(X_train,X_test,y_train,y_test)
    

python之实战----逻辑回归战iris_第1张图片

如果换成

regr=linear_model.LogisticRegression(solver='lbfgs')

结果

E:\p>python test.py
Coefficients:[[-0.39292395  0.85116785 -2.18906204 -0.92618469]
 [-0.63238864 -1.97604154  0.82981265 -1.11283148]
 [-0.11520972 -0.31335544  2.43662155  2.14776353]], intercept [  6.10476855   7.00626088 -13.89778375]
Score:0.92

再改改

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt  
import numpy as np  
from sklearn.model_selection import train_test_split   
from sklearn import datasets, linear_model
def laod_data():
    iris=datasets.load_iris()
    X_train=iris.data
    y_train=iris.target
    return train_test_split(X_train,y_train,
    test_size=0.25,random_state=0,stratify=y_train)#stratify分层
def test_LogisticRegression_multinomial(*data):
    X_train,X_test,y_train,y_test=data
    regr=linear_model.LogisticRegression(multi_class='multinomial',solver='lbfgs')#注意配合multinomial,solver=lbfgs或newton_cg
    regr.fit(X_train,y_train)
    print('Coefficients:%s, intercept %s'%(regr.coef_,regr.intercept_))
    print("Score:%.2f"%regr.score(X_test,y_test))
if __name__=='__main__':
    X_train,X_test,y_train,y_test=laod_data() 
    test_LogisticRegression_multinomial(X_train,X_test,y_train,y_test)

多分类结果

Coefficients:[[-0.38320363  0.85493316 -2.27263005 -0.98451719]
 [ 0.34354021 -0.37406767 -0.0302351  -0.86148093]
 [ 0.03966341 -0.48086549  2.30286516  1.84599812]], intercept [  8.79836808   2.46932511 -11.26769319]
Score:1.00

最后考虑正则化系数倒数C,它越小,正则化系数权重越大

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt  
import numpy as np  
from sklearn.model_selection import train_test_split   
from sklearn import datasets, linear_model

def laod_data():
    iris=datasets.load_iris()
    X_train=iris.data
    y_train=iris.target
    return train_test_split(X_train,y_train,
    test_size=0.25,random_state=0,stratify=y_train)#stratify分层

def test_LogisticRegression_C(*data):
    X_train,X_test,y_train,y_test=data
    Cs=np.logspace(-2,4,num=100)
    scores=[]
    for C in Cs:
        regr=linear_model.LogisticRegression(C=C)
        regr.fit(X_train,y_train)
        scores.append(regr.score(X_test,y_test))
##绘图
    fig=plt.figure()
    ax=fig.add_subplot(1,1,1)#subplot(numRows, numCols, plotNum)
    ax.plot(Cs,scores)
    ax.set_xlabel(r"C")
    ax.set_ylabel(r"score")
    ax.set_xscale('log')
    ax.set_title("LogisticRegression")
    plt.show()
if __name__=='__main__':
    X_train,X_test,y_train,y_test=laod_data() 
    test_LogisticRegression_C(X_train,X_test,y_train,y_test)
    

python之实战----逻辑回归战iris_第2张图片

当C增加到一定程度(正则化减少到一定程度)LogisticsRegression的预测准确率维持在一个较高的水平








你可能感兴趣的:(python数据分析实战练习)