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 pd

from 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,可能有大神比较厉害吧,能把准确率调到很高。看一下截图
在这里插入图片描述

调参问题

根据API文档,我们可以进行调参。下面是针对这里的数据说的,其他数据不一样,特别是大数据的时候情况会更加不同,因为这里的数据很少。
注意到代码中的

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))

这里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随机状态都可以调。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值