利用决策树预测学生成绩等级

这篇具有很好参考价值的文章主要介绍了利用决策树预测学生成绩等级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


使用决策树完成学生成绩等级预测,可选取部分或全部特征,分析参数对结果的影响,并进行调参优化,决策树可视化进行调参优化分析

1.数据准备

1.1 引入头文件

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from IPython.display import Image
# from sklearn.externals.six import StringIO
from sklearn import tree
import pydotplus
from six import StringIO
from sklearn.datasets import load_iris
from six import StringIO
from sklearn.metrics import accuracy_score
from sklearn.tree import accuracy_score
from sklearn.model_selection import GridSearchCV #优化模型参数
from IPython.display import Image
from sklearn.ensemble import BaggingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifer
from sklearn.ensemble import GradientBoostingClassifier
import os

os.environ["PATH"] += os.pathsep + \
'F:/mydownload/python/stable_windows_10_cmake_Release_x64_graphviz-install-2.49.1-win64/Graphviz/bin'

利用决策树预测学生成绩等级

写入头文件之前,需要下载安装所必须的依赖包。有的无法使用pip安装的内容,使用手动导入依赖的方式.

1.2 把student_1.csv数据拖入代码的同一文件夹下,同时读取文件中的数据。

stu_grade = pd.read_csv('student_1.csv')
stu_grade.head() #只读取df中前五行数据,默认为五行

利用决策树预测学生成绩等级

1.3 特征选取

课件中选取16个特征值,这里我采用了所有的特征值进行处理。

new_data = stu_grade.iloc[:,:] #通过行号来取得行列式全
new_data.head()

利用决策树预测学生成绩等级

2.数据处理

2.1 对G1、G2、G3处理

对于离散值进行连续处理,同时设置lambda函数计算G1、G2、G3。

def choice_2(x): #将G1,G2,G3做连续值处理,转换成离散值,然后替换数据
    x = int(x) #G1,G2为一阶段成绩和二阶段成绩
    if x < 5: #G3为最终成绩
        return 'bad'
    elif x >= 5 and x < 10:
        return 'medium'
    elif x >= 10 and x < 15:
        return 'good'
    else:
        return "excellent"

stu_data = new_data.copy()
stu_data['G1'] = pd.Series(map(lambda x:choice_2(x),stu_data['G1']))
stu_data['G2'] = pd.Series(map(lambda x:choice_2(x),stu_data['G2']))
stu_data['G3'] = pd.Series(map(lambda x:choice_2(x),stu_data['G3']))
stu_data.head()

利用决策树预测学生成绩等级

2.2 同样对Pedu参数进行连续值处理。

def choice_3(x): #设置对Pedu的划分,做连续值处理,转化成离散值,然后替换数据
    x = int(x)
    if x > 3:
        return "high"
    elif x > 1.5:
        return "medium"
    else:
        return "low"
    
stu_data["Pedu"] = pd.Series(map(lambda x:choice_3(x),stu_data["Pedu"]))
stu_data.head()

利用决策树预测学生成绩等级

2.3 由于数据集中每个参数差异比较大,所以这里把特征参数统一改为数字形式。

def replace_feature(data): # 把数据处理,字符串改成数字形式
    for each in data.colums: # 遍历data中的每个feature

    unique_value = set(feature_list) #剔除每个feature中重复的元素,接受参数为list # set输出值的顺序是随机,可能会产生

    i = 0
    for fea_value in unique_value: #遍历单个feature中的每个元素
        data[each] = data[each].replace(fea_value,i) # 用数字重置之前每个feature中评判标准的字符串(字符串数值离散化)
                                                    # 例如school中的“GP”评判标准改为0
                                                    # school中的"MS"判断标准改为1
        i += 1
    return data

stu_data = replace_feature(stu_data)
stu_data.head()

利用决策树预测学生成绩等级

2.4 对于当前处理过的数据集,划分训练集和测试集,并设置好随机种子等其他参数。

X_train,X_test,Y_train,Y_test = train_test_split(stu_data.iloc[:,:-1],
												stu_data['G3'],test_size=0.3,random_state=5)

利用决策树预测学生成绩等级

3.训练得到的模型

3.1 决策树

3.1.1 开始对训练集中的数据进行训练。

dt_model = DecisionTreeClassifier(criterion = 'entropy',random_state = 666)

dt_model.fit(X_train,Y_train)

利用决策树预测学生成绩等级

dot_data = tree.export_graphvis(dt_model,out_file = None,
feature_names = X_train,columns.values,
class_names = ['0','1','2','3'],
filled = True, round = True,
special_characters = True)

graph = pydotplus.graph_from_dot_data(dot_data)
# graph.write_pdf("asd.jpg")
Image(graph.create_png())

训练完的模型用来设置图像参数进行可视化展现。
利用决策树预测学生成绩等级

3.1.2 利用已经训练好的模型来预测G3的值。

Y_pred = dt_model.predict(X_test)
Y_pred

accuracy_score(Y_test,Y_pred)

利用决策树预测学生成绩等级

对训练好的模型进行打分。

entropy_thresholds = np.linspace(0,1,50)
gini_thresholds = np.linspace(0,0.5,50)

param_grid = [{'criterion:entropy'],'min_impurity_decrease':entropy_thresholds},{'criterion':['gni'],'min_impurity_decrease':gini_thresholds},{'max_depth':range(2,10)},{'min_samples_split':range(2,30,2)}
]

clf = GridSearchCV(DecisionTreeClassifier(),param_grid,cv = 5,return_train_score = True)

clf.fit(X_train,Y_train)

print("Best param: {0}\nBest score: {1}".format(clf.best_params_,clf.best_score_))

利用决策树预测学生成绩等级

3.1.3 对模型中的参数进行优化,输出优化后最好的分数。

clf = DecisionTreeClassifier(criterion = 'entropy',min_impurity_decrease = 0.04081632653061224)
clf.fit(X_train,Y_train)

利用决策树预测学生成绩等级

3.1.4 优化后的模型来绘制决策树。

dot_data = tree.export_graphviz(clf,out_file = None,feature_names = X_train.colums.values,class_names = ['0','1','2','3'],
filled = True,rounded = True,
special_characters = True)

graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())

利用决策树预测学生成绩等级

输出优化后的分数。

Y_pred1 = clf.predict(X_test)
Y_pred1

accuracy_score(Y_test,Y_pred1)

利用决策树预测学生成绩等级

3.2 集成学习

重新划分数据集用于训练模型。

X_train,X_test,Y_train,Y_test = train_test_split(stu_data,iloc[:,:-1],
																	stu_data['G3'],test_size=0.3,random_state=35)

利用决策树预测学生成绩等级

3.2.1 Decision Tree

这里采用集成学习的多个决策树方式进行训练模型,以及模型的评估。

# Decision tree
dt_model = DecisionTreeClassifier(criterion = 'entropy',random_state = 34)
dt_model.fit(X_train,Y_train)

dt_y_pred = dt_model.predict(X_test)
dt_y_pred

accuracy_score(Y_test,dt_y_pred) # 使用多个决策树进行预测

利用决策树预测学生成绩等级

3.2.2 Bagging算法

这里采用集成学习的Bagging算法进行训练模型,对模型做出分数估测。

# Bagging
tree = DecisionTreeClassifier(criterion = 'entropy',random_state = 34)

bt_model = BaggingClassifier(tree,n_estimators = 100,
													max_samples = 1.0,random_state = 34)
													# tree是使用的若分类决策树
													# n_estimators是若若分类器的个数默认为10
													# max_samples是从抽取数据中选择训练样本的数量
													# random_state是随机种子数

bt_model.fit(X_train,Y_train)
bt_y_pred = bt_model.predict(X_test)
bt_y_pred

accuracy_score(Y_test,bt_y_pred)

利用决策树预测学生成绩等级

3.2.3 这里采用集成学习的Random Forest算法进行训练模型,对模型做出分数估测。

# Random Forest

rf_model = RandomFrorestClassifier(n_estimators = 100,max_features = None,criterion = 'entropy')
							# N_estimators表示为决策树的个数
							# max_features表示随机选择特征的个数,默认是特征数的根号
							# criterion:随机森林划分特征的方法
rf_model.fit(X_train,Y_train)
rf_y_pred = rf_model.predict(X_test)
rf_y_pred

accuracy_score(Y_test,rf_y_pred)

利用决策树预测学生成绩等级

3.2.4 这里采用集成学习的AdaBoost算法进行训练模型,对模型做出分数估测。

# AdaBoost
ad_model = AdaBoostClassifier(n_estimators = 100,random_state =33) #CART gini
# n_estimators:基分类器提升(循环)次数,默认是50次,这个值过大,模型容易过拟合;值过小,模型容易欠拟合。

ad_model.fit(X_train,Y_train)
ad_y_pred = ad_model.predict(X_test)
ad_y_pred

accuracy_score

利用决策树预测学生成绩等级

3.2.5 这里采用集成学习的GBDT算法进行训练模型,对模型做出分数估测。

# GBDT 

gb_model = GradientBoostingClsaaifier(n_estimators = 100,learning_rate = 0.9,random_state = 33)
gb_model.fit(X_train,Y_train)
gb_y_pred = gb_model.predict(X_test)
gb_y_pred

accuracy_score(Y_test,gb_y_pred)

利用决策树预测学生成绩等级

4.评价结果:

模型 得分
决策树(优化前) 0.806
决策树(优化后) 0.848
多个决策树 0.831
Bagging 0.890
Random Forest 0.882
AdaBoost 0.806
GBDT 0.865

5.结论分析

根据决策树和集成学习两大类的训练模型可以看出:两种方式实现各有千秋,同样由优缺点。决策树在优化参数前后预测结果有了较明显的提升,并且有可视化的图片便于观察。集成学习中的Bagging算法对于预测结果是最好的,随之的得分情况也是最高。但是AdaBoost算法的表现就相对不够。文章来源地址https://www.toymoban.com/news/detail-481582.html

到了这里,关于利用决策树预测学生成绩等级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据分析与可视化】利用Python对学生成绩进行可视化分析实战(附源码)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 下面对学生成句和表现等数据可视化分析 1:导入模块 2:获取数据 并打印前四行  属性列表对应含义如下 Gender  性别 Nationality  国籍 PlaceofBirth 出生地 Stageid 学校级别 Gradeid 年级 Sectionid  班级 Topic 科目 semester 学期 ra

    2024年02月03日
    浏览(50)
  • 使用Python实现学生成绩管理系统

     学生成绩管理系统是一种非常普遍的管理系统 使用Python创建该系统,步骤如下: 使用os 模块 json模块,for 循环, if语句 函数,实现代码的编程,本系统主要由登录,注册,增删改查的功能  代码如下: 希望对大家有所帮!

    2024年02月11日
    浏览(46)
  • 使用C++实现的学生成绩管理系统(附完整代码)

    学生成绩管理系统可以录入、查询、修改学生的成绩,它包括:信息条目序号、学生姓名、课程名称、课程学分数、学生该课程的成绩(百分制成绩, 等级制成绩,绩点)。学生成绩管理系统能够提供以下功能: 1)录入学生的成绩信息:从键盘输入数据,依次输入:学生姓

    2024年02月06日
    浏览(38)
  • Python实践之Pandas的使用——分析统计学生期末成绩并绘图

    目录 一、实践要求 二、测试数据 18.student_score.csv文件:(以下是分别用记事本和Excel打开的数据,可自行粘贴到记事本或Excel上保存为csv文件) 三、代码实现 1.从18.student_score.csv文件中读取同学的成绩册,处理好缺失值。 输出的结果(print(df)): 2.将实验报告成绩从ABCD转

    2024年02月06日
    浏览(43)
  • 【OpenAI】Python:基于 Gym-CarRacing 的自动驾驶项目(3) | 路径训练功能的实现 | 规划与决策 | 路径平滑 | 利用公式进行目标速度预测

         猛戳订阅!  👉 《一起玩蛇》🐍 💭 写在前面:  本篇是关于多伦多大学自动驾驶专业项目的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在赛道上行驶的物理过

    2024年02月06日
    浏览(51)
  • 【OpenAI】Python:(3) 基于 Gym-CarRacing 的自动驾驶项目 | 路径训练功能的实现 | 规划与决策 | 路径平滑 | 利用公式进行目标速度预测

         猛戳订阅!  👉 《一起玩蛇》🐍 💭 写在前面:  本篇是关于多伦多大学自动驾驶专业项目的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在赛道上行驶的物理过

    2024年02月22日
    浏览(55)
  • 临床决策曲线分析如何影响预测模型的使用和评价

    目前,临床决策曲线分析(clinical decision curve analysis, DCA)在业界已经被超过1500文献使用,也被多个主流的临床杂志所推荐,更被写进了临床预测模型撰写标准(TRIPOD)中,但是许多预测模型的文章却仅仅把它当做另外一个模型评价的指标,显然是没有完全了解DCA对于预测模

    2023年04月23日
    浏览(83)
  • Python123:统计学生成绩、统计学生平均成绩与及格人数、成绩转换(C语言)

    1、统计学生成绩 题目 :本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于等于60为D; 小于60为E。 输入格式: 输入在第一行中给出

    2024年02月06日
    浏览(60)
  • 机器学习-使用决策树DecisionTreeRegressor模型对水果蔬菜价格预测

    决策树 -常用于数据分析领域的分类和回归 数据集 fruitvegprices-2017_2022.csv数据集来对水果价格的预测。 水果蔬菜价格数据集自取 本数据用来学习所用,如有错误请指正 首先我们了解到决策树 [Decision Tree]可以用来解决什么样的问题? 分类 回归 对于不同的数据选择不同的方法

    2024年02月09日
    浏览(58)
  • 极简sklearn-使用决策树预测泰坦尼克号幸存者

    泰坦尼克号幸存者数据集是kaggle竞赛中入门级的数据集,今天我们就来用决策树来预测下哪些人会成为幸存者。 数据集下载地址: https://download.csdn.net/download/ting4937/87630361  数据集中包含两个csv文件,data为训练用数据,test为测试集。 首先我们通过pandas来读取并查看数据 数据如

    2024年02月04日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包