python神经网络代码
說明
這里有一點點神經(jīng)網(wǎng)絡(luò)的代碼,寫出來記錄一下。
環(huán)境
Anaconda3-5.2.0
對運行環(huán)境有疑問的可以看我的Python決策樹代碼那塊,會比較詳細一點
重要內(nèi)容
這里要補充一點重要內(nèi)容,就是sklearn的官網(wǎng),因為很多時候調(diào)參的時候都要用到sklearn的官網(wǎng)里面的api文檔。
可以直接百度查“sklearn官網(wǎng)”
點擊進去,有時候可能一直進不去,多點擊幾次就好了
這個就是官網(wǎng)了,選擇Document,然后找到API
這次用的是神經(jīng)網(wǎng)絡(luò),所以我們需要找到的是neural_network
然后我們需要用到的是MLPClassifier
里面有關(guān)于這個函數(shù)怎么用的介紹,還有各種參數(shù)的使用,調(diào)參的時候可以在里面選擇自己想要的參數(shù)。
這個是比較重要的事,因為肯定是需要用到API文檔的。
數(shù)據(jù)
接下來看看數(shù)據(jù),數(shù)據(jù)跟上次的其實是一樣的,這里是一堆的關(guān)于撥打電話的數(shù)據(jù),里面有撥打次數(shù)什么的,最后一列是該用戶購買某種電話套餐的,我們用神經(jīng)網(wǎng)絡(luò)就是為了得到一個模型來得到根據(jù)用戶的通話數(shù)據(jù)判斷用戶是否會購買該種套餐的。我們根據(jù)自己的模型預(yù)測出來的結(jié)果和真實結(jié)果作比較,就知道這個模型好不好。
這里數(shù)據(jù)有點少,第一列是電話號碼,我們不需要用到,第二列到第16列是可能影響的數(shù)據(jù),最后一列,即17列就是最后預(yù)計的結(jié)果。所以這里要把2到16列作為X,把17列作為Y。
代碼
這里把代碼貼上再注釋,比較重要的是調(diào)參過程
# coding=utf-8 # Importing the libraries #這里是導(dǎo)入需要用到的包 import numpy as np import matplotlib.pyplot as plt import pandas as pdfrom sklearn.neural_network import MLPClassifier import numpy as np import _pickle as cPickle import gzip import matplotlib.pyplot as plt# Importing the dataset #導(dǎo)入數(shù)據(jù),這里的數(shù)據(jù)我放在了桌面上,文件名為churn.csv dataset = pd.read_csv('C:/Users/Administrator/Desktop/churn.csv') #這里就是剛才說的把2-16列作為X,17列作為Y X = dataset.iloc[:,2:16].values y = dataset.iloc[:,17].values# Splitting the dataset into the Training set and Test set #這里把數(shù)據(jù)分為訓練集和測試集 from sklearn.model_selection import train_test_split X_training, X_test_data, y_training, y_test_data = train_test_split(X, y, test_size = 0.35, random_state = 0)# Feature Scaling #這里是數(shù)據(jù)的標準化 from sklearn.preprocessing import StandardScaler sc_X = StandardScaler() X_training = sc_X.fit_transform(X_training) X_test_data = sc_X.transform(X_test_data)# 這里定義一個數(shù)組是為了待會可以多次運行得到結(jié)果,然后取平均值。 #因為每次運行出來結(jié)果不一樣,為了讓結(jié)果更穩(wěn)定,這里取10次運行后的平均值 scorelist = []for i in range(10):#注意:這里是調(diào)參的重點mlp = MLPClassifier(activation='logistic',learning_rate_init=0.01,hidden_layer_sizes=(4,),max_iter=350,random_state=3)#mlp = MLPClassifier(activation='relu',hidden_layer_sizes=(100,100,100,100,100,100,100,100))mlp.fit(X_training, y_training)#把結(jié)果放進數(shù)組中scorelist.append(mlp.score(X_test_data, y_test_data)) #輸出數(shù)組 print(scorelist) #輸出平均值 print(np.average(np.array(scorelist)))結(jié)果
最后的結(jié)果是0.91773,這是我調(diào)參之后的結(jié)果,不調(diào)參之前是0.8多的,結(jié)果我技術(shù)有限,只能調(diào)到0.917,可能有大神比較厲害吧,能把準確率調(diào)到很高。看一下截圖
調(diào)參問題
根據(jù)API文檔,我們可以進行調(diào)參。下面是針對這里的數(shù)據(jù)說的,其他數(shù)據(jù)不一樣,特別是大數(shù)據(jù)的時候情況會更加不同,因為這里的數(shù)據(jù)很少。
注意到代碼中的
這里activation就是我們使用的激活函數(shù),learning_rate_init是學習率的初始值,hidden_layer_sizes是隱層的個數(shù)以及神經(jīng)元的個數(shù)。我們這里(4,)說明只有一層隱層,而且這一層的神經(jīng)元個數(shù)是4,逗號后面可以加多幾層,神經(jīng)元的個數(shù)也可以改,就像下面注釋掉的內(nèi)容一樣。這里激活函數(shù)的使用也要看神經(jīng)網(wǎng)絡(luò)的個數(shù),如果神經(jīng)網(wǎng)絡(luò)只有三層(中間一層隱視層),一般選擇用logistic效果更好,3層以上的話一般采用relu更好。這里為什么是神經(jīng)元的個數(shù)是4?我也不知道,我就是改動數(shù)值,發(fā)現(xiàn)用4的時候比較好,所以就用了4。max_iter最大次數(shù)以及random_state隨機狀態(tài)可以進行調(diào)整。
看一下API文檔,進行相應(yīng)的調(diào)整,一直到最好的結(jié)果就可以了。
可以另外加入學習率這個參數(shù),有三個選擇可以調(diào)整,這里我試過,每種都一樣,所以這里沒有可以去調(diào),用的是默認的constant。
這里我學習率初始化的值是0.01,默認是0.001,可以適當調(diào)一下,調(diào)的越小,函數(shù)運行時間就需要越久,我這里也調(diào)過,變小了,時間慢了,但是準確率并沒有明顯提高。
這些都可以調(diào)。
另外,下面也可以一起調(diào)參
X_training, X_test_data, y_training, y_test_data = train_test_split(X, y, test_size = 0.35, random_state = 0)test_size測試集和訓練集的比例,還有random_state隨機狀態(tài)都可以調(diào)。
總結(jié)
以上是生活随笔為你收集整理的python神经网络代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: svg文字描边动画
- 下一篇: 神经网络Python实现(9行代码)