用Scikit-learn解決分類與迴歸問題
用Scikit-learn解決分類與迴歸問題
- 線性迴歸模型
和其他Python框架一樣,首先匯入我們需要的庫。在Scikit-Learn中,有很多已經封裝好的演算法庫,包括一會要用的線性模型演算法族庫(linear_model)、最近鄰演算法族庫(neighbors)、樸素貝葉斯演算法族庫(naïve_bayes)、決策樹模型演算法族庫(tree)、支援向量機模型演算法族庫(svm)、神經網路演算法模型族庫(neural_network)等等。這裡肯定匯入線性模型演算法族庫還有matplotlib來生成影象以及依靠numpy生成簡單資料集。
import matplotlib.pyplot as pltimport 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
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_變數中,而隨機誤差值
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.3和1.4可以看到結果基本還是與初期設定的值是吻合的。
-
邏輯迴歸模型
邏輯迴歸某種程度上也屬於線性模型但它反而是一個分類問題。所以在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 預測結果和效能得分