1. 程式人生 > >使用python寫神經網路模型之分類器

使用python寫神經網路模型之分類器

最近在嘗試將所有的機器學習與深度學習的模型用Python來實現,大致的學習思路如下:

  • 分類器
  • 迴歸與預測
  • 時間序列

所有的模型先用 Python語言實現,然後用Tensorflow的實現。

1 資料集

本文開始以UCI中的Iris資料集作為訓練資料集和測試時間集。該資料集給出了花萼(sepal)的長度和寬度以及花瓣(petal)的長度和寬度,根據這4個特徵訓練模型,預測花的類別(Iris Setosa,Iris Versicolour,Iris Virginica)。

# 包引入
import pandas as pd
import numpy as np
import matplotlib.pyplot as
plt import os df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None) df.head(10)

iris

1.1 資料處理

我們提取前100個樣本(50個Iris Setosa和50個Iris Versicolour),並將不同的樣本類別標註為1(Iris Versicolour)和-1(Iris Setosa);然後,將花萼的長度和花瓣的長度作為特徵。大致處理如下:

y = df.iloc[0:100, 4].values  # 預測標籤向量
y = np.where(y == 'Iris-setosa'
, -1, 1) X = df.iloc[0:100, [0,2]].values # 輸入特徵向量 # 使用散點圖視覺化樣本 plt.scatter(X[:50, 0], X[:50,1], color='red', marker='o', label='setosa') plt.scatter(X[50:100, 0], X[50:100, 1], color='blue', marker='x', label='versicolor') plt.xlabel('petal length') plt.ylabel('sepal length') plt.legend(loc='upper left') plt.show

sample_scatter

2 模型

2.1 神經網路模型

2.1.1 模型實現

我們可以將該問題轉化為一個二分類的任務,因此,可以將1與-1作為類別標籤。從而啟用函式可以表示如下:

ϕ(z)={11 , z 0  , z< 0 
大致的模型結構如下:
nn1
class Perceptron(object):
    """
    Parameters
    ------------
    eta : float
        學習率 (between 0.0 and 1.0)
    n_iter : int
        迭代次數
    Attributes
    -----------
    w_ : 1d-array
        權重
    errors_ : list
        誤差
    """
    def __init__(self, eta=0.01, n_iter=10):
        self.eta = eta
        self.n_iter = n_iter

    def fit(self, X, y):
        self.w_ = np.zeros(1 + X.shape[1])
        self.errors_ = []

        for _ in range(self.n_iter):
            errors = 0
            for xi, target in zip(X, y):
                update = self.eta * (target - self.predict(xi))
                self.w_[1:] += update * xi
                self.w_[0] += update
                errors += int(update != 0.0)
            self.errors_.append(errors)
        return self

    def net_input(self, X):
        return np.dot(X, self.w_[1:]) + self.w_[0]

    def predict(self, X):
        return np.where(self.net_input(X) >= 0.0, 1, -1)

2.1.2 模型訓練

ppn = Perceptron(eta=0.1, n_iter=10)
ppn.fit(X, y)

2.1.3 模型驗證

  1. 誤差分析
plt.plot(range(1, len(ppn.errors_) + 1), ppn.errors_, marker='o')
plt.xlabel('Epochs')
plt.ylabel('Number of misclassifications')
plt.show()

nn1_errors

  1. 視覺化分類器
from matplotlib.colors import ListedColormap
def plot_decision_regions(X, y, classifier, resolution=0.01):
    """
    視覺化分類器
    :param X:  樣本特徵向量
    :param y:  樣本標籤向量
    :param classifier: 分類器
    :param resolution: 殘差
    :return:
    """

    markers = ('s', 'x', 'o', '^', 'v')
    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
    cmap = ListedColormap(colors[:len(np.unique(y))])

    x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))

    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
    Z = Z.reshape(xx2.min(), xx2.max())

    plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)
    plt.xlim(xx1.min(), xx1.max())
    plt.ylim(xx2.min(), xx2.max())

    for idx, cl in enumerate(np.unique(y)):
        plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1], alpha=0.8, c=cmap(idx), marker=markers[idx], label=cl)

# 呼叫視覺化分類器函式
plot_decision_regions(X, y, classifier=ppn)
plt.xlabel('sepal length [cm]')
plt.ylabel('petal length [cm]')
plt.legend(loc='upper left')
plt.show()

classifier_check

相關推薦

使用python神經網路模型分類

最近在嘗試將所有的機器學習與深度學習的模型用Python來實現,大致的學習思路如下: 分類器 迴歸與預測 時間序列 所有的模型先用 Python語言實現,然後用Tensorflow的實現。 1 資料集 本文開始以UCI中的Iris資料集作為訓練資

python神經網路實現BP神經網路

在這裡插入程式碼片# -*- coding: utf-8 -*- """ Created on Sun Oct 14 10:41:33 2018 @author: fang """ # -*- coding:utf-8 -*- #! python2 impo

神經網路模型CNN網路架構

CNN網路架構 神經網路架構發展縱覽 從1998年開始,近18年來深度神經網路的架構發展情況如下: 上圖,橫座標是操作的複雜度,縱座標是精度。 模型設計一開始的時候模型權重越

用pytorch實現多層感知機(MLP)(全連線神經網路FC)分類MNIST手數字體的識別

1.匯入必備的包 1 import torch 2 import numpy as np 3 from torchvision.datasets import mnist 4 from torch import nn 5 from torch.autograd import Variable 6

神經網路學習(一)——感知分類演算法

最近,學習了一下神經網路的相關知識。寫一篇部落格,做思路整理。 神經網路包含input layer、hidden layer、output layer三層。(考慮真實神經原傳輸訊號的過程) 感知器分類演算法只適用於可以線性分割的資料!!!!! 相關概念:   訓練樣本X

吳恩達《神經網路與深度學習》課程筆記歸納(三)-- 神經網路基礎Python與向量化

上節課我們主要介紹了邏輯迴歸,以輸出概率的形式來處理二分類問題。我們介紹了邏輯迴歸的Cost function表示式,並使用梯度下降演算法來計算最小化Cost function時對應的引數w和b。通過計算圖的方式來講述了神經網路的正向傳播和反向傳播兩個過程。本節課我們將來

使用python建立自己的第一個神經網路模型吧!

神經網路(NN),也被稱為人工神經網路(ANN),是機器學習領域中學習演算法的子集,大體上借鑑了生物神經網路的概念。目前,神經網路在計算機視覺、自然語言處理等領域應用廣泛。德國資深機器學習專家Andrey Bulezyuk說到,“神經網路正在徹底改變機器學習,因為它們能夠有效

sklearn神經網路模型(有監督)

分類 MLPClassifier 引數說明: hidden_layer_sizes : 元組形式,長度n_layers-2,預設(100,),第i元素表示第i個神經元的個數 activation: {‘identity’, ‘logistic’, ‘ta

深度學習PyTorch實戰(2)——神經網路模型搭建和引數優化

  上一篇部落格先搭建了基礎環境,並熟悉了基礎知識,本節基於此,再進行深一步的學習。   接下來看看如何基於PyTorch深度學習框架用簡單快捷的方式搭建出複雜的神經網路模型,同時讓模型引數的優化方法趨於高效。如同使用PyTorch中的自動梯度方法一樣,在搭建複雜的神經網路模型的時候,我們也可以使用PyTor

神經網路神經網路結構與原理以及python實戰

技術交流qq群: 659201069   本系列埔文由淺入深介紹神經網路相關知識,然後深入神經網路核心原理與技術,最後淺出python神經網路程式設計實戰。通過本系列博文,您將徹底理解神經網路的原理以及如何通過python開發可用於生產環境的程式。本博

識別MNIST資料集(二):用Python實現神經網路

在這篇文章當中,我們將會用根據MNIST的資料集,跟大家介紹神經網路進行分類的基本原理和方法。 1.神經網路的正向計算 如果我們把神經網路當作一個黑盒來看,它的結構大概是這樣的: 輸入(層):一張圖片 計算過程 : 神經網路 輸出 (層): 這張圖

基於Tensorflow, OpenCV. 使用MNIST資料集訓練卷積神經網路模型,用於手數字識別

基於Tensorflow,OpenCV 使用MNIST資料集訓練卷積神經網路模型,用於手寫數字識別 一個單層的神經網路,使用MNIST訓練,識別準確率較低 兩層的卷積神經網路,使用MNIST訓練(模型使用MNIST測試集準確率高於99%

資料探勘資料處理——SVM神經網路的資料分類預測-義大利葡萄酒種類識別

************* 使用的工具:Matlab 分類器:SVM ************* 1、案例背景: 在葡萄酒製造業中,對於葡萄酒的分類具有很大意義,因為這涉及到不同種類的葡萄酒的存放以及出售價格,採用SVM做為分類器可以有效預測相關葡萄酒的種類,從UCI資料

利用TensorFlow訓練簡單的二分類神經網路模型

利用TensorFlow實現《神經網路與機器學習》一書中4.7模式分類練習 具體問題是將如下圖所示雙月牙資料集分類。 使用到的工具: python3.5    tensorflow1.2.1   n

python神經網路實現識別手數字

實驗說明 一直想自己寫一個神經網路來實現手寫數字的識別,而不是套用別人的框架。恰巧前幾天,有幸從同學那拿到5000張已經貼好標籤的手寫數字圖片,於是我就嘗試用matlab寫一個網路。 實驗資料:5000張手寫數字圖片(.jpg),圖片命名為

神經網路神經網路反向傳播原理與python程式設計實現

技術交流qq群: 659201069 誤差   樣本資料的真實值與神經網路的輸出值之間的差值稱為誤差,當然一般不會直接使用直接的差值,常用的有迴歸演算法的均方差、分類的交叉熵,這方面不影響我們來討論神經網路的反向傳播原理與過程,所以不做過多討論。

深度學習模型網路學習分類網路學習

1. VGG 作者團隊,發表時間 University of Oxford, ICLR-2015 文章解決的問題 提高分類準確率 解決的方案 只使用3x3的卷

python實現LSTM神經網路模型

''' 用tensorflow實現遞迴迴圈網路(LSTM) ''' from __future__ import print_function import tensorflow as tf from tensorflow.contrib import r

神經網路入門Logistic迴歸(分類問題)

Logistic迴歸(分類問題) 這部分教程將介紹一部分: Logistic分類模型 我們在上次的教程中給出了一個很簡單的模型,只有一個輸入和一個輸出。在這篇教程中,我們將構建一個二分類模型,輸入引數是兩個變數。這個模型在統計上被稱為Logistic迴歸模型,網路結構可

反欺詐技術揭祕-裝置指紋VS關係網路模型 此博文包含圖片 (2017-05-12 10:23:52)轉載▼ 標籤: 裝置指紋 關係網路 反欺詐 神經網路模型 分類: 風控 文章來源:網路(經整合梳理

       值得一提的是,雖然目前已經有第三方公司提供行業黑名單,但各平臺卻並不將其作為主要的防範手段,因為一般情況下,如果一個人的身份資訊能被黑名單查到,往往意味著行騙的過程已經結束了。             對於平臺來說,最令他們感到頭疼的是,對於騙貸者的懲罰實在是太過輕微。騙貸者在網路借貸中發生的逾