Python高級--邏輯迴歸、KNN迴歸比較

一、邏輯迴歸函數

這裏寫圖片描述

二、邏輯迴歸曲線

1)邏輯迴歸曲線

這裏寫圖片描述

2)種羣增長曲線

這裏寫圖片描述

三、邏輯迴歸

1)邏輯迴歸雖然叫回歸,但是我們一般用它來處理分類問題

將已知的值通過不斷的二分,將數據分爲不同的種類

2)優缺點(和knn相比)

優點:計算代價不高,速度很快,存儲資源低
缺點:容易欠擬合,分類精度可能不高

3)擬合比較

KNN 相對過擬合例如圖3
邏輯迴歸想對欠擬合例如圖1

這裏寫圖片描述

四、獲取數據

1)datasets.load_digits()

sklearn.datasets裏自帶的一些數字圖片
data:一系列值
target:目標值(圖片代表的數字)
imges : 數字圖片數據

2)數據處理

1、從load_digits裏獲取數據

digits = datasets.load_digits()

data = digits.data  # 數據集 特徵值
target = digits.target  # 目標值
images = digits.images  # 圖片

data.shape
(1797, 64)

2、訓練集和測試集

共1797個樣本,使用1700個來訓練,其他的用來測試

X_train = data[:1700]
y_train = target[:1700]  # 訓練集的結果值
X_test = data[1700:]
y_test = target[1700:]  # 測試集的真實結果

五、獲取模型並訓練

1)導包

from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression

2)創建模型

knn = KNeighborsClassifier()
lgc = LogisticRegression()

3)訓練模型

knn.fit(X_train,y_train)
lgc.fit(X_train,y_train)

六、模型預測

1)預測

y_knn_ = knn.predict(X_test)
y_knn_
y_lgc_ = lgc.predict(X_test)
y_lgc_

2)查看準確率

knn.score(X_test,y_test)
0.979381443298969

lgc.score(X_test,y_test)
0.9484536082474226

七、預測結果展示

將真實值畫到畫布上,用knn預測值與lgc預測值 查看是否預測正確

plt.figure(figsize=(15,25))
for i in range(97):
    # 子畫布 10行 10列 最後剩下的 空着即可
    axes = plt.subplot(10,10,i+1)  # 注意子畫布的編號從1開始 所以是i+1
    plt.imshow(X_test[i].reshape(8,8))  #畫原圖
    axes.axis('off')  #去掉座標軸
    axes.set_title('real:%d\nknn:%d\nlgc:%d'%(y_test[i],y_knn_[i],y_lgc_[i]))    # 把 真實值 knn預測值 lgc預測值 作爲標題(/n換行)

圖片太大,這裏展示部分數據
這裏寫圖片描述

八、產生數據集make_blobs

make_blobs可以根據指定的參數 去隨機生成 樣本的特徵值和目標值

n_samples:樣本量
n_features:每個樣本有多少特徵
centers:可以用來指定樣本的分類中心  分3類 就傳入三個分類中心

1)產生數據

注意返回值:特徵值集合 和 目標值集合

from sklearn.datasets import make_blobs

X_train,y_train = make_blobs(n_samples=200,n_features=2,centers=[[1,1],[3,3],[5,5]])

2)繪圖展示產生的數據

橫縱座標分別是X_train裏面的兩個特徵 這樣就定位了一個點
然後不同的分類 加上不同的顏色

plt.scatter(X_train[:,0],X_train[:,1],c=y_train)

這裏寫圖片描述

九、用KNN與邏輯迴歸機器學習模型訓練這些點

1)創建模型並訓練這些模型

knn = KNeighborsClassifier()
lgc = LogisticRegression()
knn.fit(X_train,y_train)
lgc.fit(X_train,y_train)

2)將整個畫布上的點作爲測試數據

1、提取座標點,對座標點進行處理

xmin = X_train[:,0].min()-0.5
xmax = X_train[:,0].max()+0.5
x = np.arange(xmin,xmax,0.1)  #將x軸上的點每隔0.1取一個
ymin = X_train[:,1].min()-0.5
ymax = X_train[:,1].max()+0.5
y = np.arange(ymin,ymax,0.1)  #將y軸上的點每隔0.1取一個

2、將x軸,y軸網格化

xx,yy = np.meshgrid(x,y)

3、把兩個 矩陣 扁平化 然後 用np.c_[] 合併成一個

X_test = np.c_[xx.flatten(),yy.flatten()]

3)使用兩個模型訓練數據

y_knn_ = knn.predict(X_test)

y_lgc_ = lgc.predict(X_test)

4)繪製圖形對比knn和lgc對平面上點的分類

1、指定散點圖點的顏色

這裏制定顏色需要創建一個cmap對象,再傳入散點圖的cmap中即可

from matplotlib.colors import ListedColormap
cmap1 = ListedColormap(['red','green','blue'])

2、繪製KNN與訓練數據的對比

注意:這裏先繪製背景,再繪製上面的圖,否則會被覆蓋

plt.scatter(X_test[:,0],X_test[:,1],c=y_knn_)
plt.scatter(X_train[:,0],X_train[:,1],c=y_train,cmap=cmap1)

3、繪製邏輯迴歸與訓練數據的對比

plt.scatter(X_test[:,0],X_test[:,1],c=y_lgc_)
plt.scatter(X_train[:,0],X_train[:,1],c=y_train,cmap=cmap1)

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章