1. 程式人生 > 其它 >用Scikit-learn解決分類與迴歸問題

用Scikit-learn解決分類與迴歸問題

Scikit-learn解決分類與迴歸問題

  1. 線性迴歸模型

和其他Python框架一樣,首先匯入我們需要的庫。在Scikit-Learn中,有很多已經封裝好的演算法庫,包括一會要用的線性模型演算法族庫(linear_model)、最近鄰演算法族庫(neighbors)、樸素貝葉斯演算法族庫(naïve_bayes)、決策樹模型演算法族庫(tree)、支援向量機模型演算法族庫(svm)、神經網路演算法模型族庫(neural_network)等等。這裡肯定匯入線性模型演算法族庫還有matplotlib來生成影象以及依靠numpy生成簡單資料集。

import matplotlib.pyplot as plt

import numpy as np

緊接著利用numpy生成一個0 30且步長為1的序列,這在numpy中可以採用linspace函式實現。然後直接設定好線性模型的引數放入y上。同時為了模擬現實中隨機數的情況再利用numpy加上一些隨機數。之後利用matplotlib來生成散點圖。

x = np.linspace(0,30,30)

y = 4*x + 1

x = x + np.random.rand(30)

plt.scatter(x,y) 

我們初始設定線性模型為y = 4x + 1,最後得到如圖1所示的散點圖

1.1 初始散點圖

下面,我們就直接利用Scikit-Learn

中的函式直接訓練線性迴歸模型。和之間將線性迴歸時所講的一樣,Scikit-Learn採用最小二乘法擬合模型並採用奇異值分解的方法求解。自然,這裡線性模型接收的引數只接收矩陣,因此我們還需要利用列表推導把x,y轉成列表。並且我們設定一個x_來檢測模型的預測結果。

x = [[i] for i in x]

y = [[i] for i in y]

x_ = [[1],[2]]

model = linear_model.LinearRegression()

model.fit(x,y)

model.predict(x_) 

線性模型中的權重引數w會自動存放在model.coef_變數中,而隨機誤差值

b會存放在model.intercept_中。我們獲取這兩個變數,然後重新繪製折線圖,就得到如圖1.2所示的結果。

model = linear_model.LinearRegression()

model.fit(x,y)

model.predict(x_)

w = model.coef_

b = model.intercept_

z = w*x + b

plt.plot(x,z,'g--')

plt.show() 

1.2 線性迴歸模型擬合結果

我們也可以一下模型的預測結果

1.3 模型預測結果

從圖1.31.4可以看到結果基本還是與初期設定的值是吻合的。

  1. 邏輯迴歸模型

    邏輯迴歸某種程度上也屬於線性模型但它反而是一個分類問題。所以在Scikit-Learn中也屬於線性模型演算法族庫。同時由於是離散的分類問題,我們同樣採用之前已經講過的鳶尾花資料集。引數中return_X_y表示是否將自變數與因變數獨立匯出,我們這裡肯定選True。之後呼叫LogisticRegression()函式,裡面的引數max_iter表示最大迭代次數,這裡設定成1000。最後的clf.predict()返回預測結果,clf.score()會用自帶的效能評估器評價得分。

    import matplotlib.pyplot as plt
    
    import numpy as np
    
    from sklearn.linear_model import LogisticRegression
    
    from sklearn.datasets import load_iris
    
     
    
    X,y = load_iris(return_X_y=True)
    
    clf = LogisticRegression(max_iter=1000).fit(X,y)
    
    clf.predict(X)
    
    clf.score(X,y) 

2.1 預測結果和效能得分