python神经网络代码
說明
這里有一點點神經網絡的代碼,寫出來記錄一下。
環境
Anaconda3-5.2.0
對運行環境有疑問的可以看我的Python決策樹代碼那塊,會比較詳細一點
重要內容
這里要補充一點重要內容,就是sklearn的官網,因為很多時候調參的時候都要用到sklearn的官網里面的api文檔。
可以直接百度查“sklearn官網”
點擊進去,有時候可能一直進不去,多點擊幾次就好了
這個就是官網了,選擇Document,然后找到API
這次用的是神經網絡,所以我們需要找到的是neural_network
然后我們需要用到的是MLPClassifier
里面有關于這個函數怎么用的介紹,還有各種參數的使用,調參的時候可以在里面選擇自己想要的參數。
這個是比較重要的事,因為肯定是需要用到API文檔的。
數據
接下來看看數據,數據跟上次的其實是一樣的,這里是一堆的關于撥打電話的數據,里面有撥打次數什么的,最后一列是該用戶購買某種電話套餐的,我們用神經網絡就是為了得到一個模型來得到根據用戶的通話數據判斷用戶是否會購買該種套餐的。我們根據自己的模型預測出來的結果和真實結果作比較,就知道這個模型好不好。
這里數據有點少,第一列是電話號碼,我們不需要用到,第二列到第16列是可能影響的數據,最后一列,即17列就是最后預計的結果。所以這里要把2到16列作為X,把17列作為Y。
代碼
這里把代碼貼上再注釋,比較重要的是調參過程
# coding=utf-8 # Importing the libraries #這里是導入需要用到的包 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 #導入數據,這里的數據我放在了桌面上,文件名為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 #這里把數據分為訓練集和測試集 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 #這里是數據的標準化 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)# 這里定義一個數組是為了待會可以多次運行得到結果,然后取平均值。 #因為每次運行出來結果不一樣,為了讓結果更穩定,這里取10次運行后的平均值 scorelist = []for i in range(10):#注意:這里是調參的重點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)#把結果放進數組中scorelist.append(mlp.score(X_test_data, y_test_data)) #輸出數組 print(scorelist) #輸出平均值 print(np.average(np.array(scorelist)))結果
最后的結果是0.91773,這是我調參之后的結果,不調參之前是0.8多的,結果我技術有限,只能調到0.917,可能有大神比較厲害吧,能把準確率調到很高??匆幌陆貓D
調參問題
根據API文檔,我們可以進行調參。下面是針對這里的數據說的,其他數據不一樣,特別是大數據的時候情況會更加不同,因為這里的數據很少。
注意到代碼中的
這里activation就是我們使用的激活函數,learning_rate_init是學習率的初始值,hidden_layer_sizes是隱層的個數以及神經元的個數。我們這里(4,)說明只有一層隱層,而且這一層的神經元個數是4,逗號后面可以加多幾層,神經元的個數也可以改,就像下面注釋掉的內容一樣。這里激活函數的使用也要看神經網絡的個數,如果神經網絡只有三層(中間一層隱視層),一般選擇用logistic效果更好,3層以上的話一般采用relu更好。這里為什么是神經元的個數是4?我也不知道,我就是改動數值,發現用4的時候比較好,所以就用了4。max_iter最大次數以及random_state隨機狀態可以進行調整。
看一下API文檔,進行相應的調整,一直到最好的結果就可以了。
可以另外加入學習率這個參數,有三個選擇可以調整,這里我試過,每種都一樣,所以這里沒有可以去調,用的是默認的constant。
這里我學習率初始化的值是0.01,默認是0.001,可以適當調一下,調的越小,函數運行時間就需要越久,我這里也調過,變小了,時間慢了,但是準確率并沒有明顯提高。
這些都可以調。
另外,下面也可以一起調參
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隨機狀態都可以調。
總結
以上是生活随笔為你收集整理的python神经网络代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: svg文字描边动画
- 下一篇: websocket python爬虫_p