机器学习基本模型与算法在线实验闯关

第5关:神经网络分类模型及其应用

为了完成本关任务,你需要掌握:1.数据获取及训练样本构建,2.预测样本的构建,3神经网络回归模型构建,4.利用MLPClassifier创建神经网络分类对象clf

数据获取及训练样本构建

读取data.xlsx表数据,在 5.2 基础上,取数据集前 600 条记录作为训练数据

 
  1. #取数据集前 600 条记录作为训练数据
  2. x=df.iloc[:600,:15].values
  3. y=df.iloc[:600,15].values

输出:

预测样本的构建

在 5.2 基础上,取数据集后 90 条记录作为测试

 
  1. #后 90 条记录作为测试
  2. x1=df.iloc[600:,:15].values
  3. y1=df.iloc[600:,15].values

输出:

神经网络分类模型构建

构建神经网络模型,输出其模型准确率和预测准确率。 先导入神经网络分类模块MLPClassifier,再调用clf对象中三个方法,其中分别为fit()方法进行网络训练;score ()方法,获得神经网络的预测准确率,这是针对训练数据;调用clf对象中的predict()方法可以对测试样本进行预测,获得预测结果。

 
  1. #导入神经网络回归模块MLPRegressor。
  2. from sklearn.neural_network import MLPClassifier
  3. #调用clf对象中的fit()方法进行网络训练。
  4. clf.fit(x, y)
  5. #调用clf对象中的score ()方法,获得神经网络回归的拟合优度(判决系数)。
  6. rv=clf.score(x,y)
  7. #调用clf对象中的predict()可以对测试样本进行预测,获得预测结果。
  8. R=clf.predict(x1)
  9. #计算准确率
  10. Z=R-y1
  11. Rs=len(Z[Z==0])/len(Z)
  12. print('模型准确率为:',rv)
  13. print('预测结果准确率为:',Rs)

输出:模型准确率为: 0.895
预测结果准确率为: 0.8444444444444444

利用MLPClassifier创建神经网络分类对象clf

MLPClassifier创建神经网络分类对象clf,其中需要用到的参数有很多 参数说明: solver:神经网络优化求解算法,包括lbfgs、sgd、adam 3种,默认值为adam。 alpha:模型训练误差,默认值为0.0001。 hidden_layer_sizes:隐含层神经元个数,如果是单层神经元,设置具体数值即可,本例中隐含层有两层,即5×2。 random_state:默认设置为0即可。 max_iter:设置最大迭代次数。

 
  1. clf = MLPClassifier(solver='lbfgs', alpha=1e-5,hidden_layer_sizes=(5,2), random_state=0, max_iter=1000)

编程要求

根据提示,在右侧编辑器补充代码,实现神经网络分类模型构建。

测试说明

平台会对你编写的代码进行测试。


开始你的任务吧,祝你成功!

任务代码

#********** Begin **********#
#在上一关基础,对经过缺失值填充、数值变量标准化后的数据集,取前600条记录作为训练数据,后90条记录作为测试数据
#构建神经网络分类模型,返回计算结果模型准确率rv和预测准确率r
def return_values():
    import numpy as np
    import warnings 
    # 忽略收敛警告
    warnings.filterwarnings("ignore")
    #导入神经网络回归模块MLPRegressor。
    from sklearn.neural_network import MLPClassifier
    X1=np.load('X1.npy') #经过缺失值填充、数值变量标准化后的数据集,numpy数组690*15
    Y=np.load('Y.npy')   #因变量,numpy数组,690个元素
    x = X1[:600,:]     
    y = Y[:600]
    x1 = X1[600:,:]     
    y1 = Y[600:]
    clf = MLPClassifier(solver='lbfgs', alpha=1e-5,hidden_layer_sizes=(5,2),       random_state=0, max_iter=1000)
    clf.fit(x,y) 
    rv=clf.score(x,y)
    R=clf.predict(x1)
    Z=R-y1
    r=len(Z[Z==0])/len(Z)
    #print('模型准确率为:',r)
    #print('预测准确率为:',r)
    return(rv,r)
    
#********** End **********#