非線性邏輯回歸--sklearn


前言:

大概兩三周沒動這塊了,最近要抓緊時間復習並寫博客記錄,此次為利用sklearn庫來解決非線性邏輯回歸問題

正文:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
#make_gaussian_quantiles函數
#這個函數可以用來生成數據,不需要自己進行數據寫入
from sklearn.datasets import make_gaussian_quantiles
from sklearn.preprocessing import PolynomialFeatures
#將生成2維正太分布,生成的而數據按分位數分為兩類,500個樣本,2個樣本特征
#生成兩類或多類數據
#n_samples是樣本個數 n_features是樣本特征 n_classes是樣本類型
#將生成好的數據放入x_data和y_data里
x_data,y_data = make_gaussian_quantiles(n_samples = 500,n_features = 2,n_classes = 2)
#c代表顏色,即將y_data里的兩類數據進行比較,是哪一類就用哪一種類型的顏色
plt.scatter(x_data[:,0],x_data[:,1],c = y_data)
plt.show()

利用函數數據畫出的圖像如下:
在這里插入圖片描述

logistic = linear_model.LogisticRegression()
#這里是利用源數據來進行處理,沒有做任何改動
logistic.fit(x_data,y_data)
#獲取數據值所在范圍,方便畫圖並規定x,y軸的界限
x_min,x_max = x_data[:,0].min()-1,x_data[:,0].max()+1
y_min,y_max = x_data[:,1].min()-1,x_data[:,1].max()+1
#生成網格矩陣
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
                    np.arange(y_min,y_max,0.02))
#ravel函數能將多維數據轉化為一維數據,np.c_函數需要這種類型的數據
z = logistic.predict(np.c_[xx.ravel(),yy.ravel()])
z = z.reshape(xx.shape)
#等高線圖
cs = plt.contourf(xx,yy,z)
#樣本散點圖
plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
plt.show()
#利用logistic.score函數來計算這個模型的准確率
#結果為0.568,並不理想
print('score',logistic.score(x_data,y_data))

圖片展示如下,可以看出正確率很低,還不如自己猜:
在這里插入圖片描述

#由於並不理想,所以要繼續進行處理
poly_reg = PolynomialFeatures(degree=5)
#特征處理
#這次才正在明白,經過處理后的數據會得到很多非線性邏輯的特征
#以前只是用,但不懂是什么意思
x_poly = poly_reg.fit_transform(x_data)
#定義邏輯回歸模型
logistic = linear_model.LogisticRegression()
#訓練模型
logistic.fit(x_poly,y_data)

#獲取數據值所在的范圍
x_min,x_max = x_data[:,0].min()-1,x_data[:,0].max()+1
y_min,y_max = x_data[:,1].min()-1,x_data[:,1].max()+1
#生成網格矩陣
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
                    np.arange(y_min,y_max,0.02))
#將轉型過的數據再進行處理
z = logistic.predict(poly_reg.fit_transform(np.c_[xx.ravel(),yy.ravel()]))
z = z.reshape(xx.shape)
#等高線圖
cs = plt.contourf(xx,yy,z)
#樣本散點圖
plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
plt.show()

print('score',logistic.score(x_poly,y_data))

經過處理的數據帶入圖像如下:
在這里插入圖片描述
正確率達到了百分之99,可見提前處理數據是非常必要的。

總結:

利用sklearn庫來解決非線性邏輯回歸是很可取的方法,可以簡單快捷的解決此類問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM