Python數據科學:神經網絡
(Artificial Neural Network,ANN)人工神經網絡模型,以數學和物理的方法對人腦神經網絡進行簡化、抽象和模擬。
本次只是一個簡單的神經網絡入門,涉及神經元模型和BP神經網絡。
這里簡單了解一下機器學習的三要素,分別是模型、策略與算法。
模型包括非隨機效應部分(被解釋變量和解釋變量之間的關系,多為函數關系)和隨機效應部分(擾動項)。
策略是指如何設定最優化的目標函數,常見的目標函數有線性回歸的殘差平方和、邏輯回歸的似然函數、SVM中的合頁函數等。
算法是對目標函數求參的方法,比如通過求導的方法計算,或者使用數值計算領域的算法求解。
其中神經網絡就是采用數值算法求解參數,這就意味著每次計算得到的模型參數都會是不同的。
/ 01 / 神經網絡
01 神經元模型
神經網絡中最基本的成分是神經元模型。
每個神經元都是一個多輸入單輸出的信息處理單元,輸入信號通過帶權重的連接傳遞,和閾值對比后得到總輸入值,再通過激活函數的處理產生單個輸出。
神經元的輸出,是對激活函數套用輸入加權和的結果。
神經元的激活函數使得神經元具有不同的信息處理特性,反映了神經元輸出與其激活狀態之間的關系。
本次涉及到的激活函數有閾值函數(階躍函數)、sigmoid函數(S型函數)。
02 單層感知器
感知器是一種具有單層計算單元的神經網絡,只能用來解決線性可分的二分類問題。
無法運用到多層感知器中,無法確定隱藏層的期望輸出。
它的結構類似之前的神經元模型。
激活函數采用單極性(或雙極性)閾值函數。
03 BP神經網絡
采用誤差反向傳播算法(有監督學習算法)訓練的多層神經網絡稱為BP神經網絡。
屬于多層前饋型神經網絡,模型的學習過程由信號的正向傳播和誤差反向傳播兩個過程組成。
進行正向傳播時信號從輸入層計算各層加權和,經由各隱層最終傳遞到輸出層,得到輸出結果,比較輸出結果與期望結果(監督信號),得到輸出誤差。
誤差反向傳播是依照梯度下降算法將誤差沿著隱藏層到輸入層逐層反向傳播,將誤差分攤給各層的所有單元,從而得到各個單元的誤差信號(學習信號),據此修改各單元權值。
這兩個信號傳播過程不斷循環以更新權值,最終根據判定條件判斷是否結束循環。
其網絡結構普遍為單隱層網絡,包括輸入層、隱層、輸出層。
激活函數多采用sigmoid函數或線性函數,這里隱層和輸出層均采用sigmoid函數。
/ 02/ Python實現
神經網絡在有明確的訓練樣本后,網絡的輸入層結點數(解釋變量個數)和輸出層結點數(被解釋變量的個數)便已確定。
需要考慮的則是隱含層的個數和每個隱含層的結點個數。
下面利用書中的數據進行實戰一波,一份移動離網數據。
移動通訊用戶消費特征數據,目標字段為是否流失,具有兩個分類水平(是與否)。
自變量包含了用戶的基本信息、消費的產品信息以及用戶的消費特征。
讀取數據。
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
# 設置最大顯示行數
pd.set_option('display.max_rows', 10)
# 設置最大顯示列數
pd.set_option('display.max_columns', 10)
# 設置顯示寬度為1000,這樣就不會在IDE中換行了
pd.set_option('display.width', 1000)
# 讀取數據,skipinitialspace:忽略分隔符后的空白
churn = pd.read_csv('telecom_churn.csv', skipinitialspace=True)
print(churn)
輸出數據概況,包含3000多個用戶數據。

使用scikit-learn中的函數將數據集劃分為訓練集和測試集。
# 選取自變量數據
data = churn.iloc[:, 2:]
# 選取因變量數據
target = churn['churn']
# 使用scikit-learn將數據集劃分為訓練集和測試集
train_data, test_data, train_target, test_target = train_test_split(data, target, test_size=0.4, train_size=0.6, random_state=1234)
神經網絡需要對數據進行極值標準化。
需要對連續變量進行極值標準化,分類變量需要轉變為虛擬變量。
其中多分類名義變量必須轉變為虛擬變量,而等級變量和二分類變量則可以選擇不轉變,當做連續變量處理即可。
本次數據中,教育等級和套餐類型是等級變量,性別等變量為二分類變量,這些都可以作為連續變量進行處理。
這也就意味著本次的數據集中不存在多分類名義變量,都可作為連續變量進行處理。
請輸入評論內容...
請輸入評論/評論長度6~500個字
最新活動更多
- 1 AI狂歡遇上油價破百,全球股市還能漲多久? | 產聯看全球
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實測:中文穩、細節炸,設計師慌了
- 3 6000億美元估值錨定:字節跳動的“去單一化”突圍與估值重構
- 4 Tesla AI5芯片最新進展總結
- 5 連夜測了一波DeepSeek-V4,我發現它可能只剩“審美”這個短板了
- 6 熱點丨AI“瑜亮之爭”:既生OpenClaw,何生Hermes?
- 7 AI界的殺豬盤:9秒刪庫跑路,全員被封號,還繼續扣錢!
- 8 2026,人形機器人只贏了面子
- 9 DeepSeek降價90%:價格屠夫不是身份,是戰略
- 10 AI Infra產業鏈卡在哪里了?


分享













