多层感知机(MLP)实现考勤预测二分类任务(sklearn)

一、多层感知机

        多层感知机 (Multi-Layer Perceptron)是一种有监督的学习算法,它通过在数据集进行训练来学习函数图片,其中m是输入的维数,o是输出的维数。给定一组特征图片和一个标签y,它可以学习用于分类或回归的非线性函数,与logistic回归不同,它在输入层和输出层之间可以有一个或多个非线性层,称为隐藏层。下图显示了一个带有标量输出的单隐藏层MLP。最左边的层称为输入层,由一组代表输入特征的神经元组成。

二、二分类任务

        1. 数据的收集:首先设计一个问卷调查,用来统计学生对于某门课程的各方面信息(可以当成模型的输入特征),然后结合一学期的考勤,得到一个学期这门课程的标记(有缺课记录、无缺课记录)信息。最终可整合成一个数据集。其中,这个数据集的特征和标记的说明如下。

x1: ID

x2: Q3_性别    1:男,2:女

x3: Q4_你的研究方向是什么?(1:间接相关;2:直接相关)   

x4: Q5_你的研究与机器学习什么方向有结合?(1:暂无结合;2:有结合)   

x5: Q6_你怎么评估自己的数学基础?(5分为最好)

x6: Q7_你是否有做过机器学习相关的实验?   

x7: Q8_评价下自己对机器学习的兴趣程度。(5分为非常感兴趣)

x8: Q9_是否学习过机器学习相关课程(包括网上自学)?    1:是 2:否

x9: Q10_评估下毕业后从事机器学习相关工作的可能性。(5分可能性最高)    

x10: Q11_学习机器学习这门课的主要目的是什么?(1:兴趣;2:科研;3:学分)

x11: Q12_是否与两位任课老师有科研合作?    1:是 2:否

x12: Q13_评价下目前为止课程难度(5分为最难)

y: 到课情况 1:点名到课;-1 点名没到

        数据集的部分样例如下。

        2. 数据的使用:通过收集好的数据,我们可以训练得到一个机器学习模型。

        3. 模型的应用:在将来的课程中,继续沿用设计好的调查问卷,根据学生所填的信息,输入到训练好的机器学习模型,然后输出一个类别,这个类别可以预测学生是否会缺课,老师可以重点关注这些学生,以此来改善课堂考勤率。

三、sklearn解决二分类任务

        这里利用的是多层感知机来解决上述的二分类任务。代码如下:

import csv
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score

# 加载训练数据集
def load_dataset(path):
    dataset_file = csv.reader(open(path))
    vector_x = []   # 样本
    y = []          # 样本所对应的标签
    # 从文件读取训练数据集
    for content in dataset_file:
        # 如果读取的不是表头
        if dataset_file.line_num != 1:
            # 读取一行并转化为列表
            content = list(map(float, content))
            if len(content) != 0:
                vector_x.append(content[1:12])  # 第1-12列是样本的特征
                y.append(content[-1])           # 最后一列是样本的标签
    return vector_x, y  # 返回训练数据集

# 训练模型
def mlp_cls(vector_x_train, y_train):
    # 输入层->第一层->第二层->输出层
    #    12      30     20      1  # 节点个数
    # MLPClassifier参数说明详情见https://www.cnblogs.com/-X-peng/p/14225973.html
    mlp = MLPClassifier(solver='adam', alpha=0, hidden_layer_sizes=(30, 20), random_state=1)
    mlp.fit(vector_x_train, y_train)        # 训练
    return mlp

# 模型预测
def mlp_cls_predict(mlp, vector_x_test, y_test):
    # 预测
    y_predict = mlp.predict(vector_x_test)
    # 输出模型预测的准确度
    print(accuracy_score(y_predict, y_test))

# 实验
if __name__ == '__main__':
    # 1. 加载数据集
    vector_x, y = load_dataset("dataset.csv")
    scalar = StandardScaler()               # 标准化转换
    scalar.fit(vector_x)                    # 训练标准化对象
    vector_x = scalar.transform(vector_x)   # 转换数据集
    # 2. 划分训练集和测试集
    vector_x_train, vector_x_test, y_train, y_test = train_test_split(vector_x, y, test_size=0.2, random_state=0)
    # 3. 训练
    mlp = mlp_cls(vector_x_train, y_train)
    # 4. 预测
    mlp_cls_predict(mlp, vector_x_test, y_test)

        输出

0.9696969696969697
ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.

参考资料

        1.scikit-learn — 神经网络模型

        2.sklearn 神经网络MLPclassifier参数详解

        3.实验所需的数据集

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞机火车巴雷特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值