Classification:预测学生期末成绩
clickstream是挖掘用户潜在行为的重要工具。对于在线学习平台,讲师可以通过点击流模式分析来监控学生的学习模式。
Video- clickstream记录学生观看讲座视频时的点击动作。常规video- clickstream日志文件包含以下事件:
加载视频、播放视频、暂停视频、查找视频、停止视频和切换视频速度(load_video, play_video, pause_video, seek_video, stop_video, and speed_change_video)。
在这一部分中,需要根据同一在线学习学期中63个讲座视频中的Clickstream事件日志来预测学生的期末考试成绩(通过或失败)。
数据集包括:
1.trainfeatures.csv:5050名学生的视频点击流日志信息,涵盖63个视频。需要用它来训练。
2.testfeatures.csv:1293学生视频点击流日志信息,涵盖63个视频。需要在测试阶段使用它。
trainfeatures.csv和testfeatures.csv中的学生属于同一学习学期,并共享相同的评分策略。
3.TrainLabel.csv:5050名学生的标签(1代表通过,0代表失败)。
4.TestData.csv:你需要预测的学生。他们的学习日志信息可以在testfeatures.csv中找到。
5.video info.csv:63个讲座视频的视频持续时间信息。
import numpy as np
import pandas as pd
from sklearn import svm
# **************** Load Data
train_data = pd.read_csv('TrainFeatures.csv', parse_dates=['event_time'])
train_label = pd.read_csv('TrainLabel.csv')
test_data = pd.read_csv('TestFeatures.csv', parse_dates=['event_time'])
test_user_id = pd.read_csv('TestData.csv',)
# **************** Compute Feature
#训练转换特征
#学生对于某个video是否有过操作,操作过为1,未操作过为0,并以此作为特征值
train_videos_watched = pd.DataFrame(train_data.groupby(['user_id','video_id'])['video_id'].nunique().unstack().to_records())
train_videos_watched.fillna(0,inplace=True)
#关联学生成绩,此为一组训练集
train_data_set = train_videos_watched.merge(train_label, how='left', on='user_id')
#操作测试集
test_videos_watched = pd.DataFrame(test_data.groupby(['user_id','video_id'])['video_id'].nunique().unstack().to_records())
test_videos_watched.fillna(0,inplace=True)
vids = test_data['video_id'].unique()
print(vids)
#从训练集中选取特征值和标签结果,进行训练
X = train_data_set[vids]
y = train_data_set['grade']
# **************** Train Model
svm_clf = svm.SVC()
svm_clf.fit(X, y)
# train_pred = svm_clf.predict(X)
# print(sum(train_pred)/len(train_pred))
# **************** Model Prediction
test_videos_watched['prediction'] = svm_clf.predict(test_videos_watched[vids])
test_pred = test_user_id.merge(test_videos_watched[['user_id','prediction']], how='left', on='user_id')
# print(test_pred.head())
# **************** Save Prediction Results
test_pred.to_csv('prediction.csv', index=False)
#----------------------------------------------------------------------------------------------
#以上方法使用SVM进行分类,还可以使用如下方法进行预测。
from sklearn.metrics import accuracy_score
#***************Linear分类器构建
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X, y)
print(accuracy_score(y,lr.predict(X)))
#***************RidgeClassifier()分类器: ridge是为了解决特征大于样本,而导致分类效果较差的情况,而提出的。svm有一个重要的瓶颈——当特征数大于样本数的时候,效果变差。
from sklearn.linear_model import RidgeClassifier
rc=RidgeClassifier()
rc.fit(X, y)
print(accuracy_score(y,rc.predict(X)))
#***************KNeighborsClassifier()分类器构建
from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier()
knn.fit(X, y)
print(accuracy_score(y,knn.predict(X)))
网友评论