为模型比较创建验证数据

数据挖掘 数据集 分类数据 计分 正常化 加权数据
2022-02-24 21:03:57

我正在为学生数据构建评分算法,

说属性是:

name, location, age, class, school_name, skill1, skill2, skill3 

基于这些数据,我需要创建一个学生分数。

我需要为年龄、班级、学校名称技能分配权重年龄,并为学生提供分数。

假设我有 2 个评分模型,例如:

score_1 = x1*location_weight + x2*age_weight + x2*class_weight + x3*school_name_weight + x4*skill1_weight + x5*skill2_weight + x6*skill3_weight

score_2 = y1*location_weight + y2*age_weight + y2*class_weight + y3*school_name_weight + y4*skill1_weight + y5*skill2_weight + y6*skill3_weight  

现在我如何比较这些模型并评估它们?

问题是我没有测试或验证集来证明或比较每个模型的准确性,那么在这种情况下,比较和验证不同模型的最佳方法是什么?还有什么是从头开始构建验证集的最佳方法?

2个回答

预测和评分是两个不同的任务。

根据您的回答和评论,您并没有解决预测问题。您只想根据某些规则为每个学生设置 [1,100] 范围内的数字。这是排名(或得分,无论如何)。

因此,术语#prediction_model、#accuracy、#validation、#training_set不在此范围内你不需要验证任何东西。你没有做出预测。

您想要的是将排名映射到学生。

但一个问题是,您拥有的大多数分类数据(学校名称、位置等)无法“排名”。其中一些根本没用:学生姓名如何代表他的学校进度?:)

如果您以某种方式将其更改为数字(例如'Skill_1_level'、'Skill_2_level'、'remoteness_of_location'、'school rank'等),则可以进行一些排名:

  1. 标准化数据:您的每个因素

在此处输入图像描述

  1. 乘以 100,因为你想要 [0,100] 范围而不是 [0,1]
  2. 根据因素的重要性,根据您的经验设置权重。所以权重之和为1。
  3. 最后建立一个排名(分数):

Rank = 0.1 * Skill_1_level + 0.2 * Skill_2_level + 0.05 * remoteness_of_location + 0.5 * school_rank + ...

我会首先修复一个种子(这样结果是可重现的),然后选择一个子样本(比如 10pct 的数据)并将其保存为验证集。如果您使用的是 R,请检查 caret 包

https://cran.r-project.org/web/packages/caret/index.html

如果 Python 是您的首选武器,请熟悉 3.1 中的 sklearn 文档:

http://scikit-learn.org/stable/modules/cross_validation.html

两者都有可能派上用场的多种功能。如果您的计算资源允许,我建议使用交叉验证程序(在多个训练验证拆分上评估模型),我提供的两个链接都包含对可以帮助您实现该目标的多个函数的引用。