100天搞定機器學習|Day4-6 邏輯迴歸

邏輯迴歸avik-jain介紹的不是特別詳細,下面再嘮叨一遍這個算法。算法

1.模型網絡

在分類問題中,好比判斷郵件是否爲垃圾郵件,判斷腫瘤是否爲陽性,目標變量是離散的,只有兩種取值,一般會編碼爲0和1。假設咱們有一個特徵X,畫出散點圖,結果以下所示。這時候若是咱們用線性迴歸去擬合一條直線:hθ(X) = θ0+θ1X,若Y≥0.5則判斷爲1,不然爲0。這樣咱們也能夠構建出一個模型去進行分類,可是會存在不少的缺點,好比穩健性差、準確率低。而邏輯迴歸對於這樣的問題會更加合適。
dom

邏輯迴歸假設函數以下,它對θTX做了一個函數g變換,映射至0到1的範圍以內,而函數g稱爲sigmoid function或者logistic function,函數圖像以下圖所示。當咱們輸入特徵,獲得的hθ(x)實際上是這個樣本屬於1這個分類的機率值。也就是說,邏輯迴歸是用來獲得樣本屬於某個分類的機率。函數


2.評價學習

回想起以前線性迴歸中所用到的損失函數:測試

 若是在邏輯迴歸中也運用這種損失函數,獲得的函數J是一個非凸函數,存在多個局部最小值,很難進行求解,所以須要換一個cost函數。從新定義個cost函數以下:優化

當實際樣本屬於1類別時,若是預測機率也爲1,那麼損失爲0,預測正確。相反,若是預測爲0,那麼損失將是無窮大。這樣構造的損失函數是合理的,而且它仍是一個凸函數,十分方便求得參數θ,使得損失函數J達到最小。
編碼

3.優化3d

咱們已經定義好了損失函數J(θ),接下來的任務就是求出參數θ。咱們的目標很明確,就是找到一組θ,使得咱們的損失函數J(θ)最小。最經常使用的求解方法有兩種:批量梯度降低法(batch gradient descent), 牛頓迭代方法((Newton's method)。兩種方法都是經過迭代求得的數值解,可是牛頓迭代方法的收斂速度更加快。


實驗-分割線

第0步:數據預覽
數據集連接:https://pan.baidu.com/s/1TkUe-7-Q_jX5IT2qrXzeuA
提取碼:hrrm
該數據集包含了社交網絡中用戶的信息。這些信息涉及用戶ID,性別,年齡以及預估薪資。一家汽車公司剛剛推出了他們新型的豪華SUV,咱們嘗試預測哪些用戶會購買這種全新SUV。而且在最後一列用來表示用戶是否購買。咱們將創建一種模型來預測用戶是否購買這種SUV,該模型基於兩個變量,分別是年齡和預計薪資。所以咱們的特徵矩陣將是這兩列。咱們嘗試尋找用戶年齡與預估薪資之間的某種相關性,以及他是否購買SUV的決定。
code

步驟1 | 數據預處理

導入庫

import numpy as npimport matplotlib.pyplot as pltimport pandas as pd

導入數據集

dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
Y = dataset.iloc[:,4].values

將數據集分紅訓練集和測試集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.25, random_state = 0)

特徵縮放

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

步驟2 | 邏輯迴歸模型

該項工做的庫將會是一個線性模型庫,之因此被稱爲線性是由於邏輯迴歸是一個線性分類器,這意味着咱們在二維空間中,咱們兩類用戶(購買和不購買)將被一條直線分割。而後導入邏輯迴歸類。下一步咱們將建立該類的對象,它將做爲咱們訓練集的分類器。

將邏輯迴歸應用於訓練集

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, y_train)

步驟3 | 預測

預測測試集結果

y_pred = classifier.predict(X_test)

步驟4 | 評估預測

咱們預測了測試集。 如今咱們將評估邏輯迴歸模型是否正確的學習和理解。所以這個混淆矩陣將包含咱們模型的正確和錯誤的預測。

生成混淆矩陣

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

可視化

from matplotlib.colors import ListedColormap
X_set,y_set=X_train,y_train
X1,X2=np. meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),
                   np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())for i,j in enumerate(np. unique(y_set)):
    plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],                c = ListedColormap(('red', 'green'))(i), label=j)

plt. title(' LOGISTIC(Training set)')
plt. xlabel(' Age')
plt. ylabel(' Estimated Salary')
plt. legend()
plt. show()

X_set,y_set=X_test,y_test
X1,X2=np. meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),
                   np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01))

plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())for i,j in enumerate(np. unique(y_set)):
    plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],                c = ListedColormap(('red', 'green'))(i), label=j)

plt. title(' LOGISTIC(Test set)')
plt. xlabel(' Age')
plt. ylabel(' Estimated Salary')
plt. legend()
plt. show()


相關文章
相關標籤/搜索