第一阶段工作总结-模型算法尝试

工作:

这段时间根据群里讨论的算法,打算尝试基于LIBFM矩阵分解进行学生成绩预测,如果要使用libfm,要使用线性回归,同时要清楚是根据学科还是专业来分别建立模型。
同时学习小程序教程。
第一周主要工作是先确定我负责算法方面的工作。观察数据后发现可以将学生的学习行为提取为特征。通过LIBFM矩阵分解算法预测学生成绩。

经过我们团队的商讨,将项目划分为算法设计和界面设计展示两部分,经过分工讨论,我的任务是辅助组长张同学,组员曲同学,参与算法设计,同时与组员成sir一同设计并实现配套的微信小程序项目。

1. 基于LIBFM矩阵分解算法的学生成绩预测

1.1 算法准备前言

这学期刚好创新设计跟随实验室进行了基于LIBFM矩阵分解算法的学生成绩预测,于是产生了将LIBFM矩阵分解算法运用到该项目中的想法。

1.2 LIBFM算法加上MCMC采样算法

在 LIBFM 中,提供了两大类的模型训练方法,一类是基于梯度的训练方法,另一类是基于 MCMC 的模型训练方法。其中 MCMC 学习方法非常简单好用,因为要调整的超参数非常少。下面将简要介绍 MCMC 算法的由来和发展。
MCMC 由两个 MC 组成,即蒙特卡罗方法(Monte Carlo Simulation,简称 MC)和马尔科夫链(Markov Chain ,也简称 MC)。MCMC 方法是用来在概率空间,通过随机采样估算兴趣参数的后验分布。

1.3 基于 LIBFM 的学生成绩预测

这里针对 LIBFM 框架下的 MCMC 算法下的学生成绩预测进行实现。利用 LIBFM 框架, 通过所有学生的历史学期成绩,预测学生当前学期成绩。主要算法核心使用的是 MCMC 马尔可夫链蒙特卡罗算法。
LIBFM 全称为 Factorization Machine Library,是由 Steffen Rendle 于 2010 年提出的。Steffen Rendle 在矩阵分解 (MF)、SVD++ 、PITF 、FPMC 等基础之上,归纳出针对高维稀疏数据的因子机 (Factorization Machine, FM) 模型。因子机模型可以将上述模型全部纳入一个统一的框架进行分析。并且,Steffen Rendle 实现了一个单机多线程版本的 libFM。
LIBFM 不仅仅适用于推荐系统,而是和 SVM 一样可以用于数据挖掘中的很多问题,以分类问题为主。他接受的数据格式和 libSVM 是一样的,每行一个数值(分类结果 or 打分结果等),对应一组特征,每个非零特征都需要给出数值,零特征忽略。他的思想应该是从推荐系统中经典的 SVD 模型(因子分解模型)得到的,经典的 SVD 模型当中相当于只有两种类型的feature,一类 feature 是 user,一类 feature 是 item,而 LIBFM 是把这个模型推广到了多类feature 的情况。

LIBFM 训练和测试数据的格式要求

libFM 模型使用的数据格式为 libvsm 格式,改格式的要求为一行一个样本,第一列是标签,其余列是 feature 特征。如下图所示,是带有三个特征的样本数据。
 libvsm 格式数据

LIBFM 环境要求

win10 dell xps15
VMWare 虚拟机,ubuntu18.04
libfm-master1.4.4

数据准备

下载的慕课数据

数据预处理

首先需要将原始数据进行处理和数据集切分,用于适应 LIBFM 训练和十折交叉验证。数据集划分,构建 python 代码实现十折训练集,测试集划分,将训练集切分成十分,选取
其中一份当作测试集,但得到的测试结果的查全率较低。为使模型获得更好的学习效果,通过十折交叉验证划分后生成的测试集验证集。将特征和成绩处理成我们之前提到的libsvm格式。接下来的在ubuntu虚拟机linux上进行训练,使用开源的框架libfm-master1.4.4进行训练。
将txt文件进行十折划分并转换为libvsm格式文件的python相关代码。

import csv
from pandas import read_excel
from sklearn.model_selection import KFold
import numpy as np
import random
from sklearn.utils import shuffle
from sklearn.model_selection import KFold
import xlrd
import pandas as pd
import os






'''
#将dataframe转换为txt
df.to_csv('output.txt', sep='\t', index=0, header=0)

'''
#将txt格式的数据转换为libvsm格式文件。
def CSVtoLibsvm(datapath,savepath):
    # read data file
    readin = open(datapath, 'r')
    # write data file
    output = open(savepath, 'w')
    try:
        the_line = readin.readline()
        while the_line:
            # delete the \n
            the_line 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值