【课程设计】基于决策树算法的学生成绩分析( 三 )


ii 调
# 选取最合适的最小叶子树min_samples = []for min_sample in range(30):clf = tree.DecisionTreeClassifier(max_depth=best_depth,min_samples_leaf=min_sample+5)clf.fit(feature_train, label_train)# 拟合score = clf.score(feature_test, label_test)min_samples.append(score)best_min_samples_leaf = min_samples.index(max(min_samples))+5print(best_min_samples_leaf)plt.figure(figsize=(20, 8), dpi=80)plt.plot(range(4, 34), min_samples)plt.xlabel('min samples leaf')plt.ylabel('evaluate score')plt.show();
(3)根据调好的参数构建模型
# 根据最合适的参数构建模型mytree = tree.DecisionTreeClassifier(max_depth=best_depth,min_samples_leaf=best_min_samples_leaf)mytree.fit(feature_train,label_train)return mytree
3、可视化
安装、插件
可视化生成的决策树
def tree_visualise(mytree):# 可视化dot_data = http://www.kingceram.com/post/tree.export_graphviz(mytree, out_file=None,/feature_names=["Attendance","Preview","Job"],\class_names=["excellent","good","poor"],\rounded=True)graph = pydotplus.graph_from_dot_data(dot_data)graph.write_pdf("dtree.pdf")
六、实验结果及分析
数据量及预测正确率如下图:
七、总结与展望
本文所训练的数据量只有1852条,其中用于训练模型的只有1296条,数据量相对较小,正确率只达到了62.3% 。随着教学的继续,网络平台上会积累更多的学生学习数据,随着数据量的增长,模型也会训练的越来越好,预测精确率越来越高 。
有于时间关系,本设计并没有把模型做到最优 。在日后的改进中,可以从3个方面进行改进:数据预处理方面,根据数据特点选择更好的方法清洗脏数据,本文选择的是平均值填入法,并不是最优的;算法选择方面,选择多种算法进行预测,挑选预测了最高的进行使用;算法参数调优方面,选择更好的评价标准 。
在进行本文的代码实现部分时,我最先是自己编码实现决策树算法,但是后面改变了策略,选择了直接调人家写好的包来实现 。也许有些人会觉得自己实现岂不是更好,而我不予苟同,像我这般低水平的编程者,先不说写出来的代码的效率,代码的正确性都可能是个问题 。另外,我们应该专注于解决问题,本文的目的是实现通过学生行为数据来预测学生期末成绩的类别,应该先将其实现,再考虑算法的优化 。我认为,借助别人的成果来解决自己的问题,而不是把时间花在重复造轮子上,这是最明智的选择 。因为,只有站在巨人的肩膀上,我们才能看的更远 。
八、参考文献
[1] 董师倢.数据挖掘中的数据预处理技术[J].信息与电脑(理论版),2016(19):144-145.
[2] 范丽.基于的数据可视化[J].电子世界,2020(08):52-53.
【【课程设计】基于决策树算法的学生成绩分析】[3] 郭秋红.信息可视化中数据可视化的多样化[J].计算机产品与流通,2020(07):103.