訂閱
糾錯
加入自媒體

Python數(shù)據(jù)科學(xué):神經(jīng)網(wǎng)絡(luò)

(Artificial Neural Network,ANN)人工神經(jīng)網(wǎng)絡(luò)模型,以數(shù)學(xué)和物理的方法對人腦神經(jīng)網(wǎng)絡(luò)進行簡化、抽象和模擬。

本次只是一個簡單的神經(jīng)網(wǎng)絡(luò)入門,涉及神經(jīng)元模型和BP神經(jīng)網(wǎng)絡(luò)。

這里簡單了解一下機器學(xué)習(xí)的三要素,分別是模型、策略與算法。

模型包括非隨機效應(yīng)部分(被解釋變量和解釋變量之間的關(guān)系,多為函數(shù)關(guān)系)和隨機效應(yīng)部分(擾動項)。

策略是指如何設(shè)定最優(yōu)化的目標(biāo)函數(shù),常見的目標(biāo)函數(shù)有線性回歸的殘差平方和、邏輯回歸的似然函數(shù)、SVM中的合頁函數(shù)等。

算法是對目標(biāo)函數(shù)求參的方法,比如通過求導(dǎo)的方法計算,或者使用數(shù)值計算領(lǐng)域的算法求解。

其中神經(jīng)網(wǎng)絡(luò)就是采用數(shù)值算法求解參數(shù),這就意味著每次計算得到的模型參數(shù)都會是不同的。

/ 01 / 神經(jīng)網(wǎng)絡(luò)

01 神經(jīng)元模型

神經(jīng)網(wǎng)絡(luò)中最基本的成分是神經(jīng)元模型。

每個神經(jīng)元都是一個多輸入單輸出的信息處理單元,輸入信號通過帶權(quán)重的連接傳遞,和閾值對比后得到總輸入值,再通過激活函數(shù)的處理產(chǎn)生單個輸出

神經(jīng)元的輸出,是對激活函數(shù)套用輸入加權(quán)和的結(jié)果。

神經(jīng)元的激活函數(shù)使得神經(jīng)元具有不同的信息處理特性,反映了神經(jīng)元輸出與其激活狀態(tài)之間的關(guān)系。

本次涉及到的激活函數(shù)有閾值函數(shù)(階躍函數(shù))、sigmoid函數(shù)(S型函數(shù))。

02 單層感知器

感知器是一種具有單層計算單元的神經(jīng)網(wǎng)絡(luò),只能用來解決線性可分的二分類問題。

無法運用到多層感知器中,無法確定隱藏層的期望輸出。

它的結(jié)構(gòu)類似之前的神經(jīng)元模型。

激活函數(shù)采用單極性(或雙極性)閾值函數(shù)。

03 BP神經(jīng)網(wǎng)絡(luò)

采用誤差反向傳播算法(有監(jiān)督學(xué)習(xí)算法)訓(xùn)練的多層神經(jīng)網(wǎng)絡(luò)稱為BP神經(jīng)網(wǎng)絡(luò)。

屬于多層前饋型神經(jīng)網(wǎng)絡(luò),模型的學(xué)習(xí)過程由信號的正向傳播誤差反向傳播兩個過程組成。

進行正向傳播時信號從輸入層計算各層加權(quán)和,經(jīng)由各隱層最終傳遞到輸出層,得到輸出結(jié)果,比較輸出結(jié)果與期望結(jié)果(監(jiān)督信號),得到輸出誤差。

誤差反向傳播是依照梯度下降算法將誤差沿著隱藏層到輸入層逐層反向傳播,將誤差分?jǐn)偨o各層的所有單元,從而得到各個單元的誤差信號(學(xué)習(xí)信號),據(jù)此修改各單元權(quán)值。

這兩個信號傳播過程不斷循環(huán)以更新權(quán)值,最終根據(jù)判定條件判斷是否結(jié)束循環(huán)。

其網(wǎng)絡(luò)結(jié)構(gòu)普遍為單隱層網(wǎng)絡(luò),包括輸入層隱層、輸出層。

激活函數(shù)多采用sigmoid函數(shù)或線性函數(shù),這里隱層和輸出層均采用sigmoid函數(shù)。

/ 02/ Python實現(xiàn)

神經(jīng)網(wǎng)絡(luò)在有明確的訓(xùn)練樣本后,網(wǎng)絡(luò)的輸入層結(jié)點數(shù)(解釋變量個數(shù))和輸出層結(jié)點數(shù)(被解釋變量的個數(shù))便已確定。

需要考慮的則是隱含層的個數(shù)和每個隱含層的結(jié)點個數(shù)。

下面利用書中的數(shù)據(jù)進行實戰(zhàn)一波,一份移動離網(wǎng)數(shù)據(jù)。

移動通訊用戶消費特征數(shù)據(jù),目標(biāo)字段為是否流失,具有兩個分類水平(是與否)。

自變量包含了用戶的基本信息、消費的產(chǎn)品信息以及用戶的消費特征。

讀取數(shù)據(jù)。

import pandas as pd

from sklearn import metrics

import matplotlib.pyplot as plt

from sklearn.preprocessing import MinMaxScaler

from sklearn.neural_network import MLPClassifier

from sklearn.model_selection import GridSearchCV

from sklearn.model_selection import train_test_split

# 設(shè)置最大顯示行數(shù)

pd.set_option('display.max_rows', 10)

# 設(shè)置最大顯示列數(shù)

pd.set_option('display.max_columns', 10)

# 設(shè)置顯示寬度為1000,這樣就不會在IDE中換行了

pd.set_option('display.width', 1000)

# 讀取數(shù)據(jù),skipinitialspace:忽略分隔符后的空白

churn = pd.read_csv('telecom_churn.csv', skipinitialspace=True)

print(churn)

輸出數(shù)據(jù)概況,包含3000多個用戶數(shù)據(jù)。

使用scikit-learn中的函數(shù)將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。

# 選取自變量數(shù)據(jù)

data = churn.iloc[:, 2:]

# 選取因變量數(shù)據(jù)

target = churn['churn']

# 使用scikit-learn將數(shù)據(jù)集劃分為訓(xùn)練集和測試集

train_data, test_data, train_target, test_target = train_test_split(data, target, test_size=0.4, train_size=0.6, random_state=1234)

神經(jīng)網(wǎng)絡(luò)需要對數(shù)據(jù)進行極值標(biāo)準(zhǔn)化。

需要對連續(xù)變量進行極值標(biāo)準(zhǔn)化,分類變量需要轉(zhuǎn)變?yōu)樘摂M變量。

其中多分類名義變量必須轉(zhuǎn)變?yōu)樘摂M變量,而等級變量和二分類變量則可以選擇不轉(zhuǎn)變,當(dāng)做連續(xù)變量處理即可。

本次數(shù)據(jù)中,教育等級和套餐類型是等級變量,性別等變量為二分類變量,這些都可以作為連續(xù)變量進行處理。

這也就意味著本次的數(shù)據(jù)集中不存在多分類名義變量,都可作為連續(xù)變量進行處理。

1  2  3  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯
x
*文字標(biāo)題:
*糾錯內(nèi)容:
聯(lián)系郵箱:
*驗 證 碼:

粵公網(wǎng)安備 44030502002758號