1. 程式人生 > >機器學習:邏輯迴歸與Python程式碼實現

機器學習:邏輯迴歸與Python程式碼實現

前言:本篇博文主要介紹邏輯迴歸(logistic regression),首先介紹相關的基礎概念和原理,然後通過Python程式碼實現邏輯迴歸的二分類問題。特別強調,其中大多理論知識來源於《統計學習方法_李航》斯坦福課程翻譯筆記以及Coursera機器學習課程

本篇博文的理論知識都來自於吳大大的Coursera機器學習課程,人家講的深入淺出,我就不一一贅述,只是簡單概括一下以及記一下自己的見解。

1.邏輯迴歸假設函式

邏輯迴歸一般用於分類問題較多,但是叫做“regression”,而線性迴歸一般不建議用於分類,因為輸出的y的值可能超出0/1範圍。這也就是為什麼邏輯迴歸假設函式裡面有sigmoid函式的原因了。


2.成本函式

邏輯迴歸問題不在採用“最小均方”誤差,因為裡面含有非線性的sigmiod函式,使得成本函式J不再是一個平滑的“碗”,容易導致“區域性最優”,所以採用如下cost function:


3.引數學習(梯度下降)


你會發現,這個跟線性迴歸模型的梯度下降表達上一模一樣,但是,你要知道,其中的h(x)是不一樣的

4.Python程式碼實現

先看一下資料集,這是一種花的資料集,只取X中的兩個特徵(x1,x2),對於y中的兩個類別(0,1)

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np

iris = load_iris()
data = iris.data
target = iris.target
#print data[:10]
#print target[10:]
X = data[0:100,[0,2]]
y = target[0:100]
print X[:5]
print y[-5:]
label = np.array(y)
index_0 = np.where(label==0)
plt.scatter(X[index_0,0],X[index_0,1],marker='x',color = 'b',label = '0',s = 15)
index_1 =np.where(label==1)
plt.scatter(X[index_1,0],X[index_1,1],marker='o',color = 'r',label = '1',s = 15)

plt.xlabel('X1')
plt.ylabel('X2')
plt.legend(loc = 'upper left')
plt.show()

編寫邏輯迴歸模型的類
import numpy as np

class logistic(object):
    def __init__(self):
        self.W = None
    def train(self,X,y,learn_rate = 0.01,num_iters = 5000):
        num_train,num_feature = X.shape
        #init the weight
        self.W = 0.001*np.random.randn(num_feature,1).reshape((-1,1))
        loss = []
        
        for i in range(num_iters):
            error,dW = self.compute_loss(X,y)
            self.W += -learn_rate*dW
            
            loss.append(error)
            if i%200==0:
                print 'i=%d,error=%f' %(i,error)
        return loss
    
    def compute_loss(self,X,y):
        num_train = X.shape[0]
        h = self.output(X)
        loss = -np.sum((y*np.log(h) + (1-y)*np.log((1-h))))
        loss = loss / num_train
        
        dW = X.T.dot((h-y)) / num_train
    
        return loss,dW
    
    def output(self,X):
        g = np.dot(X,self.W)
        return self.sigmod(g)
    def sigmod(self,X):
        return 1/(1+np.exp(-X))
    
    def predict(self,X_test):
        h = self.output(X_test)
        y_pred = np.where(h>=0.5,1,0)
        return y_pred
訓練測試一下,並且視覺化跟蹤的損失loss
import matplotlib.pyplot as plt

y = y.reshape((-1,1))
#add the x0=1
one = np.ones((X.shape[0],1))
X_train = np.hstack((one,X))
classify = logistic()
loss = classify.train(X_train,y)
print classify.W

plt.plot(loss)
plt.xlabel('Iteration number')
plt.ylabel('Loss value')


plt.show()

最後視覺化“決策邊界”

label = np.array(y)
index_0 = np.where(label==0)
plt.scatter(X[index_0,0],X[index_0,1],marker='x',color = 'b',label = '0',s = 15)
index_1 =np.where(label==1)
plt.scatter(X[index_1,0],X[index_1,1],marker='o',color = 'r',label = '1',s = 15)

#show the decision boundary
x1 = np.arange(4,7.5,0.5)
x2 = (- classify.W[0] - classify.W[1]*x1) / classify.W[2]
plt.plot(x1,x2,color = 'black')
plt.xlabel('X1')
plt.ylabel('X2')
plt.legend(loc = 'upper left')
plt.show()

ps:可以看出,最後學習得到的決策邊界(分類邊界)成功的隔開了兩個類別。當然,分類問題還有多分類問題(一對多),還有就是對於非線性分類問題,詳情請參見分享的資料。

相關推薦

機器學習邏輯迴歸Python程式碼實現

前言:本篇博文主要介紹邏輯迴歸(logistic regression),首先介紹相關的基礎概念和原理,然後通過Python程式碼實現邏輯迴歸的二分類問題。特別強調,其中大多理論知識來源於《統計學習方法_李航》和斯坦福課程翻譯筆記以及Coursera機器學習課程。 本篇博

機器學習線性迴歸Python程式碼實現

前言:本篇博文主要介紹線性迴歸模型(linear regression),首先介紹相關的基礎概念和原理,然後通過Python程式碼實現線性迴歸模型。特別強調,其中大多理論知識來源於《統計學習方法_李航》和斯坦福課程翻譯筆記以及Coursera機器學習課程。 1.線性迴歸

機器學習邏輯迴歸基礎知識+程式碼實現

1. 基本概念 邏輯迴歸用於二分類,將對輸入的線性表示對映到0和1之間,輸出為label為1的概率。 優點:實現代價低,可輸出分類概率。適用於資料線性不可分。 缺點:容易欠擬合,分類精度可能不高,且僅限二分類。 使用資料型別:數值型和標稱資料。 邏輯迴歸本質也是線性迴歸,但是

機器學習邏輯迴歸詳細推導

如今機器學習、深度學習可謂炙手可熱,人工智慧也確實開始影響、改變著我們的生活。正因如此,很多同學開始接觸或者學習這方面的知識。機器學習的入門是有難度的,因為它不僅要求你會編碼,還要你熟悉高等數學,比如線性代數,微積分等,除此之外,還要懂統計學。如果你想入門機器學習,那麼一定要好好學習邏輯迴歸。原因如

Coursera機器學習 week3 邏輯迴歸 程式設計作業程式碼

這是Coursera上 Week3 的 “邏輯迴歸” 的程式設計作業程式碼。經過測驗,全部通過。 下面是 sigmoid.m 的程式碼: function g = sigmoid(z) %SIG

機器學習用6行Python程式碼開始寫第一個機器學習程式

import sklearn from sklearn import tree # features = [[140, "smooth"],[130, "smooth"],[150, "bumpy"],[170,  "bumpy"]] # labels = ["apple",

梯度下降和邏輯迴歸例子(Python程式碼實現)

import numpy as np import pandas as pd import os data = pd.read_csv("iris.csv") # 這裡的iris資料已做過處理 m, n = data.shape dataMatIn = np.ones((m, n)) dataM

機器學習4邏輯迴歸線性迴歸

邏輯迴歸與線性迴歸求解過程: 總體來說,迴歸過程都分三步: 1、Model 2、Loss Fuction 3、Gradient Decent 分析: 1、Model:線性迴歸中,模型為線性方程,取值範圍無窮大;邏輯迴歸中,通過sigmod函式函式將線性方程z轉化成概率(

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

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

機器學習交叉驗證和模型選擇Python程式碼實現

前言:本篇博文主要介紹交叉驗證(cross validation)和模型選擇,首先介紹相關的基礎概念和原理,然後通過Python程式碼實現交叉驗證和模型評估以及選擇。特別強調,其中大多理論知識來源於《統計學習方法_李航》和斯坦福課程翻譯筆記。 1.分類器的評價 評價分類

Stanford機器學習 第三週邏輯迴歸正則化

一、邏輯迴歸 1.1 分類問題 判斷一封電子郵件是否是垃圾郵件;判斷一次金融交易是否是欺詐;判斷腫瘤是惡性的還是良性的等屬於分類問題。 Eg:預測病人的腫瘤是惡性(malignant)還是良性(benign),用線性迴歸的方法擬合一條直線如圖 當hθ大於等於0.5時,預測 y

機器學習線性迴歸和嶺迴歸入門程式碼

機器學習中運用python進行對房子價格的預測程式碼,資料庫直接使用sklearn自帶的boston,使用三種方法進行預測,分別是:線性迴歸直接預測、梯度下降預測、嶺迴歸預測 from sklearn.datasets import load_boston fr

常用的幾種機器學習演算法迴歸模型python程式碼實現

       由於在論文實驗過程中一直使用的是python語言完成的論文實驗,所以在論文需要使用機器學習方法時就考慮使用了scikit-learn。        scikit-learn是一款很好的Python機器學習庫,它包含以下的特點:        (1)簡單高效的資

機器學習邏輯迴歸(logistics regression)程式碼(牛頓法實現

      先貼一張圖解釋牛頓法原理:       然後以一道問題為例:       這個問題是《機器學習》周志華版本上的題目,給了西瓜的密度和含糖率資料,判斷西瓜的好壞。資料在程式碼裡。       下面貼一下程式碼: <span style="font-size

機器學習邏輯回歸(損失函數)

梯度 模型 分享圖片 com info 而且 機器學習 邏輯 分類 # # 由於邏輯回歸解決的是分類問題,而且是二分類,因此定義損失函數時也要有兩類   # 1)如果 y = 1(p ≥ 0.5),p 越小,損失函數越大;   # 2)如果 y = 0(p ≤ 0.5),

分享《深入淺出深度學習原理剖析python實踐》PDF+源代碼

img color fff png aid pdf ffffff pytho 下載 下載:https://pan.baidu.com/s/1H4N0W5sPOE7YlK0KyC7TZQ 更多資料分享:http://blog.51cto.com/3215120 《深入淺出深度

機器學習Multinoulli分佈多項式分佈

學習深度學習時遇見multinoulli分佈,在此總結一下機器學習中常用的multinoulli分佈與多項式分佈之間的區別於關係,以便更好的理解其在機器學習和深度學習中的使用。 首先介紹一下其他相關知識。 Bernoulli分佈 (兩點分佈) Bernoulli分佈是單個二值隨機變數

機器學習線性迴歸、嶺迴歸、Lasso迴歸

 轉載自:https://blog.csdn.net/hzw19920329/article/details/77200475 線性迴歸作為一種迴歸分析技術,其分析的因變數屬於連續型變數,如果因變數轉變為離散型變數,將轉換為分類問題。迴歸分析屬於有監督學習問題,本部落格將重點回

《深入淺出深度學習原理剖析python實踐》pdf 下載

深入淺出深度學習:原理剖析與Python實踐》介紹了深度學習相關的原理與應用,全書共分為三大部分,第一部分主要回顧了深度學習的發展歷史,以及Theano的使用;第二部分詳細講解了與深度學習相關的基礎知識,包括線性代數、概率論、概率圖模型、機器學習和至優化演算法;在第三部分中,針對若干核心的深度

運籌系列19scheduling模型python程式碼求解

1. 問題模型 scheduling問題比assignment問題又要複雜很多。在排程問題中,除了要考慮任務分配外,還要考慮時間約束。 來看一個官方例子:job shop problem。資料如下: job 0 = [(0, 3), (1, 2), (2, 2)] job 1 = [(0