1. 程式人生 > >機器學習筆記 -吳恩達(第七章:邏輯迴歸,python實現 附原始碼)

機器學習筆記 -吳恩達(第七章:邏輯迴歸,python實現 附原始碼)

(1)邏輯迴歸概念

1. 迴歸(Regression)
迴歸,我的理解來說,其直觀的理解就是擬合的意思。我們以線性迴歸為例子,在二維平面上有一系列紅色的點,我們想用一條直線來儘量擬合這些紅色的點,這就是線性迴歸。迴歸的本質就是我們的預測結果儘量貼近實際觀測的結果,或者說我們的求得一些引數,經過計算之後的預測結果儘可能接近真實值。

2. 邏輯迴歸的由來對於二類線性可分的資料集,使用線性感知器就可以很好的分類。如下圖中紅色和藍色的點,我們使用一條直線就可以區分兩種資料集,在直線上方的屬於紅色類,直線下方的屬於藍色類。

但是如果二類線性不可分的資料集,我們無法找到一條直線能夠將兩種類別很好的區分,即線性迴歸的分類法對於線性不可分的資料無法有效分類。例如下圖中的紅色點和藍色點,我們無法使用一條直線很好的區分這兩類,但是我們可以使用非線性分類器,如果我們使用

在圓外面的為紅色類,在圓裡面的一類為藍色類。

誠然,資料線性可分可以使用線性分類器,如果資料線性不可分,可以使用非線性分類器,這裡似乎沒有邏輯迴歸什麼事情。但是如果我們想知道對於一個二類分類問題,對於具體的一個樣例,我們不僅想知道該類屬於某一類,而且還想知道該類屬於某一類的概率多大,有什麼辦法呢?

線性迴歸和非線性迴歸的分類問題都不能給予解答,因為線性迴歸和非線性迴歸的問題,假設其分類函式如下:

(2)資料探索

在訓練的初始階段,我們將要構建一個邏輯迴歸模型來預測,某個學生是否被大學錄取。設想你是大學相關部分的管理者,想通過申請學生兩次測試的評分,來決定他們是否被錄取。現在你擁有之前申請學生的可以用於訓練邏輯迴歸的訓練樣本集。對於每一個訓練樣本,你有他們兩次測試的評分和最後是被錄取的結果。為了完成這個預測任務,我們準備構建一個可以基於兩次測試評分來評估錄取可能性的分類模型。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

path = 'ex2data1.txt'
data = pd.read_csv(path, header=None, names=['Exam 1', 'Exam 2', 'Admitted'])
data.head()

(2)資料視覺化

建立兩個分數的散點圖,並使用顏色編碼來視覺化,如果樣本是正的(錄取)或負的(不錄取)。

positive = data[data['Admitted'].isin([1])]
negative = data[data['Admitted'].isin([0])]

fig, ax = plt.subplots(figsize=(12,8))
ax.scatter(positive['Exam 1'], positive['Exam 2'], s=50, c='b', marker='o', label='Admitted')
ax.scatter(negative['Exam 1'], negative['Exam 2'], s=50, c='r', marker='x', label='Not Admitted')
ax.legend()
ax.set_xlabel('Exam 1 Score')
ax.set_ylabel('Exam 2 Score')
plt.show()

(3)設計模型

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

(4)損失函式

def cost(theta, X, y):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    first = np.multiply(-y, np.log(sigmoid(X * theta.T)))
    second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T)))
    return np.sum(first - second) / (len(X))

(5)資料預處理

 
data.insert(0, 'Ones', 1)
cols = data.shape[1]
X = data.iloc[:,0:cols-1]
y = data.iloc[:,cols-1:cols]

# convert to numpy arrays and initalize the parameter array theta
X = np.array(X.values)
y = np.array(y.values)
theta = np.zeros(3)

#計算一下初始損失值大小

cost(theta, X, y)

(6)梯度下降

def gradient(theta, X, y):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)    
    parameters = int(theta.ravel().shape[1])
    grad = np.zeros(parameters)    
    #誤差
    error = sigmoid(X * theta.T) - y    
    for i in range(parameters):
        #點乘 元素相乘
        term = np.multiply(error, X[:,i])
        grad[i] = np.sum(term) / len(X)    
    return grad

(7)梯度下降優化損失函式,尋找引數值

現在可以用SciPy's truncated newton(TNC)實現尋找最優引數。

import scipy.optimize as opt

#func  優化目標函式  x0 依賴的引數  fprime 為梯度下降函式
result = opt.fmin_tnc(func=cost, x0=theta, fprime=gradient, args=(X, y))
result

#代入引數值,計算損失函式的值

cost(result[0], X, y)

(8)預測

def predict(theta, X):
    probability = sigmoid(X * theta.T)
    return [1 if x >= 0.5 else 0 for x in probability]

(9)預測準確率評估

theta_min = np.matrix(result[0])
predictions = predict(theta_min, X)
correct = [1 if ((a == 1 and b == 1) or (a == 0 and b == 0)) else 0 for (a, b) in zip(predictions, y)]
#map()函式將correct轉化為全部為int的列表
accuracy = (sum(map(int, correct)) % len(correct))
print ('accuracy = {0}%'.format(accuracy))

相關推薦

機器學習筆記 -邏輯迴歸python實現 原始碼

(1)邏輯迴歸概念 1. 迴歸(Regression) 迴歸,我的理解來說,其直觀的理解就是擬合的意思。我們以線性迴歸為例子,在二維平面上有一系列紅色的點,我們想用一條直線來儘量擬合這些紅色的點,這就是線性迴歸。迴歸的本質就是我們的預測結果儘量貼近實際觀測的結果,或者說我們

機器學習筆記 -線性迴歸tensorflow實現 原始碼

(1)資料概覽 import pandas as pd import seaborn as sns sns.set(context="notebook", style="whitegrid", palette="dark") import matplotlib.pyplot

機器學習筆記 -邏輯迴歸-手寫數字識別python實現 原始碼

(1)資料集描述 使用邏輯迴歸來識別手寫數字(0到9)。 將我們之前的邏輯迴歸的實現,擴充套件到多分類的實現。 資料集是MATLAB的本機格式,要載入它到Python,我們需要使用一個SciPy工具。影象在martix X中表示為400維向量(其中有5,000個), 400

機器學習筆記 -第一緒論

0.機器學習定義   一個程式由經驗E中學習,解決任務T,達到效能度量值P,當且僅當,有了經驗值E後,經過P的評判,程式在處理T的時候經驗有所提升。 1.機器學習運用領域:         資料探勘

機器學習筆記 - - 目錄

目錄 linear regreesion 線性迴歸 logistic regression 邏輯迴歸 程式碼放在了我的Github:https://github.com/youmux/machine_learning 參考: 推導過程:halfrost1 程式碼實現:何寬2

機器學習筆記--機器學習課程2

梯度下降法 對於梯度下降法而言,當偏導數 的學習效率過大或過小時,收斂的速率會變得很緩慢,α過大時甚至會無法收斂。學習效率α是一個正數。 同樣梯度下降法初始點在區域性最低點時同樣不會再更新,此時偏導數的值為0.

(有解題思路)機器學習coursera六週最後測驗習題彙總

         第六週的習題做了三遍才100%正確,其中還是參照了不少論壇裡大神的答案(比如BeiErGeLaiDe的部落格,連結點選開啟連結)         正式進入主題:ML第六週最後測驗,共五題。文中大部分屬於個人觀點,如有錯誤歡迎指正、交流。1. You are

卷積神經網路3:目標檢測學習筆記[Deep Learning]

1.目標定位 1.1 分類、定位、檢測簡介 - Image classification 影象分類,就是給你一張圖片,你判斷目標是屬於哪一類,如汽車、貓等等。 - Classification with localization 定位分類,

學習筆記——-機器學習課程-1.3 用神經網路進行監督學習

         神經網路有時媒體炒作的很厲害,考慮到它們的使用效果,有些說法還是靠譜的,事實上到目前為止,幾乎所有的神經網路創造的經濟價值都基於其中一種機器學習,我們稱之為“監督學習”,那是什麼意思呢?         我們來看一些例子, 在監督學習中輸入x,習得一個函式

學習筆記——-機器學習課程 1.2 什麼是神經網路

1.2 什麼是神經網路         “深度學習”指的是訓練神經網路,有的時候 規模很大,那麼神經網路是什麼呢?我們從一個房價預測的例子開始,假設有一個六間房屋的資料集已知房屋的面積,單位是平房英尺或者平方米,已知房屋價格,想要找到一個函式,根據房屋面積,預測房價的函式,

機器學習》--周志華 學習筆記

神經網路 神經元模型 ​ 神經網路是由具有適應性的簡單單元組成的廣泛並行互連的網路,它的組織能夠模擬生物神經系統對真實世界物體所作出的互動反應 ​ 神經網路中最基本的成分是神經元模型,即“簡單單元”,在生物神經網路中,每個神經元與其他神經元相連

機器學習|周志華|李巨集毅|演算法】清單 #收藏#

網路轉自:https://blog.csdn.net/julialove102123/article/details/78729602系列學習記錄:1、吳恩達機器學習系列;2、李巨集毅機器學習課程;3、周志華 西瓜書;4、十大演算法練習;5、系列學習資源;      周志華:

coursera《機器學習-week1-03 梯度下降演算法

梯度下降演算法 最小化代價函式J 梯度下降 使用全機學習最小化 首先檢視一般的J()函式 問題 我們有J(θ0, θ1) 我們想獲得 min J(θ0, θ1) 梯度下降適用於更一般的功能 J(θ0, θ1, θ2 …. θn) min J(θ0, θ

資料庫系統概論資料庫設計

第七章:資料庫設計 7.1  資料庫設計概述  1、資料庫設計 (1)資料庫設計是指對於一個給定的應用環境,構造(設計)優化的資料庫邏輯模式和物理結構,並據此建立資料庫及其應用系統,使之能夠有效地儲存和管理資料,滿足各種使用者的應用需求,包括資訊管理要求和資料

zcmu-1131: 早知道是夢一場(思維題)

    Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 118  Solved: 44 [Submit][Status][Web

Andrew Ng機器學習》課程筆記11周——機器學習簡介單變數線性迴歸

吳恩達(Andrew Ng)在 Coursera 上開設的機器學習入門課《Machine Learning》: 目錄 一、引言 一、引言 1.1、機器學習(Machine Learni

Andrew Ng機器學習》課程筆記22周——多變數線性迴歸

目錄 四、多變數線性迴歸(Linear Regression with multiple variables) 4.1. 多維特徵(Multiple features) 前面介紹的是單變數線性迴歸如下圖所示:

機器學習---邏輯迴歸

一、邏輯迴歸 邏輯迴歸通俗的理解就是,對已知類別的資料進行學習之後,對新得到的資料判斷其是屬於哪一類的。 eg:對垃圾郵件和非垃圾郵件進行分類,腫瘤是惡性還是良性等等。 1.為什麼要用邏輯迴歸: 對於腫瘤的例子:  在外面不考慮最右邊的樣本的時候我們擬合的線性迴歸

機器學習筆記線性迴歸回顧

本章是對線性代數的一些簡單回顧,由於之前學過,所以這裡只是簡單的將課程中的一些例子粘過來 矩陣表示 矩陣加法和標量乘法 矩陣向量乘法 用矩陣向量乘法來同時計算多個預測值 矩陣乘法 用矩陣乘法同時計算多個迴歸

AndrewNG機器學習課程學習小技巧

前言 因為現在是機器學習的熱潮,之前也是看過一部分的資料,比如李航的《統計學習方法》也拜讀過,但真正系統的學習還真的是沒有。也想趁著最近一段比較能自由支配的時間好好學習一段時間。現在學習了一段時間,先把這些記錄小技巧記錄下來吧。 視訊課程 視訊的話大家有很多渠道