1. 程式人生 > >用python實現邏輯迴歸

用python實現邏輯迴歸

機器學習課程的一個實驗,整理出來共享。
原理很簡單,優化方法是用的梯度下降。後面有測試結果。

# coding=utf-8
from math import exp

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets.samples_generator import make_blobs


def sigmoid(num):
    '''

    :param num: 待計算的x
    :return: sigmoid之後的數值
    '''
    if type(num) == int or type(num) == float:
        return 1.0 / (1 + exp(-1 * num))
    else:
        raise ValueError, 'only int or float data can compute sigmoid'


class logistic():
    def __init__(self, x, y): 
        if type(x) == type(y) == list:
            self.x = np.array(x)
            self.y = np.array(y)
        elif type(x) == type(y) == np.ndarray:
            self.x = x
            self.y = y
        else:
            raise ValueError, 'input data error'

    def sigmoid(self, x):
        '''

        :param x: 輸入向量
        :return: 對輸入向量整體進行simgoid計算後的向量結果
        '''
        s = np.frompyfunc(lambda x: sigmoid(x), 1, 1)
        return s(x)

    def train_with_punish(self, alpha, errors, punish=0.0001):
        '''

        :param alpha: alpha為學習速率
        :param errors: 誤差小於多少時停止迭代的閾值
        :param punish: 懲罰係數
        :param times: 最大迭代次數
        :return:
        '''
        self.punish = punish
        dimension = self.x.shape[1]
        self.theta = np.random.random(dimension)
        compute_error = 100000000
        times = 0
        while compute_error > errors:
            res = np.dot(self.x, self.theta)
            delta = self.sigmoid(res) - self.y
            self.theta = self.theta - alpha * np.dot(self.x.T, delta) - punish * self.theta  # 帶懲罰的梯度下降方法
            compute_error = np.sum(delta)
            times += 1

    def predict(self, x):
        '''

        :param x: 給入新的未標註的向量
        :return: 按照計算出的引數返回判定的類別
        '''
        x = np.array(x)
        if self.sigmoid(np.dot(x, self.theta)) > 0.5:
            return 1
        else:
            return 0


def test1():
    '''
    用來進行測試和畫圖,展現效果
    :return:
    '''
    x, y = make_blobs(n_samples=200, centers=2, n_features=2, random_state=0, center_box=(10, 20))
    x1 = []
    y1 = []
    x2 = []
    y2 = []
    for i in range(len(y)):
        if y[i] == 0:
            x1.append(x[i][0])
            y1.append(x[i][1])
        elif y[i] == 1:
            x2.append(x[i][0])
            y2.append(x[i][1])
    # 以上均為處理資料,生成出兩類資料
    p = logistic(x, y)
    p.train_with_punish(alpha=0.00001, errors=0.005, punish=0.01)  # 步長是0.00001,最大允許誤差是0.005,懲罰係數是0.01
    x_test = np.arange(10, 20, 0.01)
    y_test = (-1 * p.theta[0] / p.theta[1]) * x_test
    plt.plot(x_test, y_test, c='g', label='logistic_line')
    plt.scatter(x1, y1, c='r', label='positive')
    plt.scatter(x2, y2, c='b', label='negative')
    plt.legend(loc=2)
    plt.title('punish value = ' + p.punish.__str__())
    plt.show()


if __name__ == '__main__':
    test1()

執行結果如下圖
image1

部落格首頁

相關推薦

python實現邏輯迴歸

機器學習課程的一個實驗,整理出來共享。 原理很簡單,優化方法是用的梯度下降。後面有測試結果。 # coding=utf-8 from math import exp import matplotlib.pyplot as plt import numpy as np from sklearn.datase

21-城裏人套路深之python實現邏輯回歸算法

rom 成功 基礎知識 壓力 dvp ilb nbsp html 感覺 如果和一個人交流時,他的思想像彈幕一樣飄散在空中,將是怎樣的一種景象?我想大概會毫不猶豫的點關閉的。生活為啥不能簡單明了?因為太直白了令人乏味。保留一些不確定性反而撲朔迷離,引人入勝。我們學習了線性回歸

機器學習之Python進行邏輯迴歸分析

前言 迴歸和分類方法是機器學習中經常用到的方法,本文首先介紹這兩種方法的區別和聯絡,然後對分類方法中的邏輯迴歸進行較詳細的說明(包括其基本原理及評估指標),最後結合案例介紹如何利用Python進行邏輯迴歸分析。 一、分類與迴歸 1.1什麼是分類和迴歸 區分迴歸問題

Python實現邏輯迴歸演算法(一)

本次用Python實現邏輯迴歸演算法,邏輯迴歸是應用非常廣泛的一個分類及其學習演算法,它將資料擬合到一個logit函式中,從而完成對事件發生的概率進行預測。本次學習筆記主要參考了《Python進行資料分析與挖掘實踐》和作者@寒小陽的部落格,地址如下:http://blog.c

Python實現邏輯迴歸(Logistic Regression in Python)

本文基於yhat上Logistic Regression in Python,作了中文翻譯,並相應補充了一些內容。本文並不研究邏輯迴歸具體演算法實現,而是使用了一些演算法庫,旨在幫助需要用Python來做邏輯迴歸的訓練和預測的讀者快速上手。 邏輯迴歸是一項可用於預測二分

Python實現邏輯迴歸

預備資源 Python的幾個包: numpy: Python的語言擴充套件,定義了數字的陣列和矩陣 pandas: 直接處理和操作資料的主要package statsmodels: 統計和計量經濟學的package,包含了用於引數評估和統計測試的實用工具

8種方法Python實現線性迴歸,為你解析最高效選擇

來源:大資料文摘編譯:丁慧、katherine Hou、錢天培作者:TirthajyotiSar

一文教你全面掌握Python實現線性迴歸

全文共4968字,預計學習時長15分鐘或更長 本文旨在為讀者理解和應用線性迴歸時提供參考。雖然線性迴歸演算法很簡單,但是隻有

Python實現線性迴歸邏輯迴歸演算法

本文使用python實現了線性迴歸和邏輯迴歸演算法,並使用邏輯迴歸在實際的資料集上預測疝氣病症病馬的死亡率(當然這裡我們的線性迴歸和邏輯迴歸實現是原生的演算法,並沒有考慮正則化係數問題,後期會將其補充完整)。 一、線性迴歸 1.模型表示 2.損失函式

通過機器學習的線性迴歸演算法預測股票走勢(Python實現

    在本人的新書裡,將通過股票案例講述Python知識點,讓大家在學習Python的同時還能掌握相關的股票知識,所謂一舉兩得。這裡給出以線性迴歸演算法預測股票的案例,以此講述通過Python的sklearn庫實現線性迴歸預測的技巧。     本文先講以波士頓房價資

機器學習——手把手教你Python實現迴歸樹模型

本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天這篇是機器學習專題的第24篇文章,我們來聊聊迴歸樹模型。 所謂的迴歸樹模型其實就是用樹形模型來解決迴歸問題,樹模型當中最經典的自然還是決策樹模型,它也是幾乎所有樹模型的基礎。雖然基本結構都是使用決策樹,但是根據預測方法的不同也可

python實現LBP特征點計算

i+1 [0 code read cvt lena 實現 ims numpy 1 import cv2 2 import numpy as np 3 4 5 def olbp(src): 6 dst = np.zeros(src.shape,dty

python實現歸並排序

想是 一個 pass 列合並 cnblogs plist post 思想 str def merge(lfrom, lto, low, mid, high): i, j, k = low, mid, low while i < mid and j &l

python實現一個命令行文本編輯器

screen alt 保存 模型 既然 ffffff 圖片 單行 pda “這看起來相當愚蠢”——題記   不過我整個人都很荒誕,何妨呢?貼一張目前的效果圖   看起來很舒服,不是麽?即使一切都是個幌子:光標只能在最後,按一下上下左右就會退出,一行超出75個字符

python實現銀行轉賬功能

賬號 pytho exec llb 賬戶 密碼 rollback money 輸入數據 #coding:utf-8 import MySQLdb #調用MySQL數據庫模塊 conn=MySQLdb.Connect( host='.........

Python 實現武科大教務處自動搶課

kit overflow 簡單的 pos request 直接 sts itl head 首先分析網頁,找到教務處登錄的驗證碼 然後用 Python 直接把驗證碼下載到本地(整個程序通過 requests 庫實現): def GetRandCode(): url

Python實現一個大數據搜索及源代碼

Python編程語言 Python案例講解 Python基礎精講 在日常生活中,大家了解搜索引擎如百度、360、搜狗、谷歌等,搜索是大數據領域裏常見的需求。Splunk和ELK分別是該領域在非開源和開源領域裏的領導者。本文利用很少的Python代碼實現了一個基本的數據搜索功能,試圖讓大家理解大數據

Python實現Excel的讀寫

github exc orm pytho sheet bin blog light int 一、讀excel文件的簡單示例 #!/usr/bin/env python # -*- coding:utf-8 -*- import xlrd from xlrd.bo

資深程序員Python實現數據驅動的接口自動化測試!

AS 自動 示例 AC adding get json face 內容 2. 方案 針對上面的API,在做接口測試時,需要的測試用例動輒會多達10+, 這個時候采用數據驅動的方式將共性的內容寫入配置文件或許會更合適。 這裏考慮把API、參數、以及預期結果預行在格式化的CS

神級程序員教你Python實現簡單的導彈自動追蹤!此乃裝逼神技!

大致 範圍 發現 完美 容易 game 分析 iss 兩個 由於待會要用pygame演示,他的坐標系是y軸向下,所以這裏我們也用y向下的坐標系。 計算sina和cosa,正弦對比斜,余弦鄰比斜,斜邊可以利用兩點距離公式計算出,即: 於是 AC的長度就是導彈的速度乘