机器学习,如何使用MLPClassifier神经网络分类器做预测?
发布于 作者:苏南大叔 来源:程序如此灵动~目前接触到的机器学习任务都比较简单,基本套路都是处理获取数据,然后一部分作为训练集,一部分作为测试数据。然后应用到不同的机器学习的分类器,先训练然后做识别。如果从宏观上来说的话,套路都比较类似。只是数据分类器不同罢了。那么,本文中说的新的分类器,叫做神经网络分类器MLPClassifier
。
大家好,这里是苏南大叔的程序如此灵动博客,这里介绍苏南大叔和计算机代码的故事。本文描述机器学习中的神经网络分类器MLPClassifier
的简单使用方式。测试环境:win10
,python@3.6.8
,sklearn@0.24.2
。
基本思路
在前面的文章里面,已经学习了两个机器学习的数据分类器。分别是:
这些分类器处理过的模型,可以保存为文件,下次使用的时候,直接加载即可。参考文章:
分类器预测的结果,也可以保存为csv
文件或者xls
文件。参考文章:
准备数据
需求本身准备了两个excel
文件,其中一个data_train.xlsx
用于训练,另外一个data_predict.xlsx
用于预测。
字段有四个,分别是:注册天数,学习时长,金币数量,是否会员。除了“是否会员”外,数据类型上都是整数,否则在使用分类器的时候,会报错。
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
df_fit = pd.read_excel("data_train.xlsx", header=0)
X = df_fit.iloc[:, 0:3]
y = df_fit['是否会员']
神经网络分类器(调试参数)
鉴于MLPClassifier
有几个参数,可以先利用已知数据,调整一下参数看看准确度情况。
model_MLPClassifier = MLPClassifier(activation='logistic', max_iter=1000, hidden_layer_sizes=(50, 50, 50))
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
model_MLPClassifier.fit(X_train, y_train)
score_trainset = model_MLPClassifier.score(X_train, y_train)*100
score_testset = model_MLPClassifier.score(X_test, y_test)*100
print("训练集预测准确率:%.2f%%" % score_trainset)
print("测试集预测准确率:%.2f%%" % score_testset)
如果对准确度满意的话,就可以使用对应参数,获得下面的语句:
model_MLPClassifier = MLPClassifier(activation='logistic', max_iter=1000, hidden_layer_sizes=(50, 50, 50))
model_MLPClassifier.fit(X, y)
当然,可以把这个model_MLPClassifier
保存为训练结果文件,以便下次直接使用。
预测结果
如果大家做过多次这种类似的训练的话,就会知道,最终的预测结果实际上也是个概率的问题,只是某种结果的可能性更大而已。如果看预测结果,那么可以使用:
X_pred = df_pred.iloc[:, 0:3]
results = model_MLPClassifier.predict(X_pred)
print(results)
如果想看到预测结果的倾向性,可以使用:
results = model_MLPClassifier.predict_proba(X_pred) * 100
results_df = pd.DataFrame(np.around(results, 2), columns=['非会员概率', '会员概率'])
print(results)
至于这里的两列为啥前面是“非会员”,后面是“会员”。苏南大叔是这么理解的,因为false
和true
,两者还可以用0
和1
来描述。那么,零所代表的false
排序在前面,所以... 如果理解的不对,欢迎留言指正。
相关文章
- https://newsn.net/say/sklearn-multinomialnb.html
- https://newsn.net/say/sklearn-gaussiannb.html
- https://newsn.net/say/python-joblib.html
综述
机器学习的这些分类器框架还是比较成熟简单的,目前来看,这些分类器之间也就是参数的不同,使用方式都是非常雷同的。苏南大叔个人觉得这个预测的过程,就有些像是根据一堆数据盲猜的过程,其实分类器对于某个数字代表什么意思,是大一些比较好,还是小一些比较好,都是无感的。
至于这些分类器的背后,包含着什么样的逻辑,请参考苏南大叔的后续文章。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。