最近在覆盤機器學習的內容,課程中最基礎的例子是利用sklearn中的logisticregression 來進行將資料進行分類訓練,並畫出決策邊界,這是課程中的效果圖,
下面來說一下我的程式:
首先載入資料,練習中給的資料及有三列,x1,x2,y,x1和x2 是特徵屬性,y作為分類的結果,值有兩種 0和1 ,所以這是二分類的問題
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv('data.csv')
載入資料後 構建資料的屬性列和標籤列
x = np.array(data[['x1','x2']])
y = np.array(data['y'])
選用 sklearn 中的 logisticregression 邏輯回歸來訓練資料
from sklearn.linear_model import logisticregression
classifier = logisticregression()
classifier.fit(x,y)
對於 logisticregression 函式的返回的屬性的幾點說明:
coef_:返回決策函式中的特徵係數
intercept_:返回決策函式的截距
具體函式說明請檢視官方說明文件:
簡單來介紹下邏輯回歸的原理
經過學習的模型是一組權值
這裡sigmoid函式的形式求出
由於sigmoid函式的定義域為
所以logistic回歸最關鍵的問題就是研究如何求得極大似然估計來做的。
上段程式在執行後即可獲得 classifier.coef_ 和 classifier.intercept_,可以採用print 列印出來看下返回值
print(classifier.coef_) #決策函式中的特徵係數 :w1,w2....wn
print(classifier.intercept_) #決策函式中的截距 :w0
因為本資料集合中有兩個特徵列,即特徵數是2,所以classifier.coef_ 是乙個shape是(1,2)的陣列,而classifier.intercept_ 是乙個shape為(1,)的陣列。
如果只有兩個特徵值,則很容易通過公式畫出邏輯回歸的決策邊界
因此得到畫邊界線的函式
def x2(x1):
print('coef_:',classifier.coef_ ,classifier.coef_[0][0])
print("intercept_:",classifier.intercept_)
print("coef_ shape:",classifier.coef_.shape)
print("intercept_shape:",classifier.intercept_.shape)
print("classes_:",classifier.classes_)
return (-classifier.coef_[0][0] * x1 - classifier.intercept_[0]) / classifier.coef_[0][1]
最後將資料點散點圖形式呈現,並畫出邊界線
x1 = data[data['y'] == 0]
x2 = data[data['y'] == 1]
plt.scatter(x2['x1'],x2['x2'],c='blue')
plt.scatter(x1['x1'],x1['x2'],c='red')
x1_plot = np.linspace(0, 1,100)
print(x1_plot)
x2_plot = x2(x1_plot)
plt.plot(x1_plot, x2_plot)
plt.show()
執行後的結果:
python 分類問題決策邊界視覺化
以二維平面上的分類問題為例 真實的決策邊界為背景顏色,圓點的顏色表示了乙個隨機模型賦予的標籤。下面展示如何繪製上圖 首先需要兩個函式給樣本打標籤 def f true x return np.sum x x,axis 1 0.25 astype np.int deff random x return...
決策樹模型分類標準視覺化
樹模型 dtree tree.decisiontreeregressor max depth 2,min samples leaf 500,min samples split 5000 dtree dtree.fit x,y 視覺化 import pydotplus from ipython.dis...
python線性回歸視覺化 視覺化我的線性回歸模型
我有3個pr dictor 原因 wt0 dbp0 和gfr0m作為 值 import numpy,pandas,and ggplot import numpy as np from pandas import from ggplot import create python dataframe c...