这是一个悬而未决的问题:
假设我需要根据一些输入来预测学生的考试成绩,例如:花在准备,以前的分数等上的时间。我应该如何将输出限制在0-100之间?有什么最好的做法?
谢谢!
编辑:
由于答案主要是关注我们预测后的模型输出边界,是否有可能事先训练模型,以便模型隐含地学习这个边界?
答案 0 :(得分:1)
你会训练一个等张回归模型:http://scikit-learn.org/stable/modules/generated/sklearn.isotonic.IsotonicRegression.html
或者您可以简单地剪切超出范围的预测值。
答案 1 :(得分:0)
通常的做法是,在训练多味数据时将其适当地缩放到0-1之间,例如,假设您的测试数据为:
[输入:[10小时学习,最后一次测试100%],输出:[此测试为95%]]
那么你首先应该通过除以每个元素中最大的数值或最大可能的值来标准化输入和输出:
input = input / input.max
output = output / 100
[输入:[0.1,1],输出:[0.95]]
当您完成训练并希望预测测试分数时,只需将输出乘以100就可以了。
BTW你想做的事情在stephenwelch的神经网络Youtube系列中有详细记载。
答案 2 :(得分:0)
您可以执行标准化或标准化。他们会在[0,1]内转换你的值。
我不确定为什么你需要将范围设置为0-100,但如果确实如此,你可以乘以100以获得上述转换后的范围。
规范化:此功能列的每个值都按如下方式转换:
X_new =(X - X_min)/(X_max - X_min)
其中X_min和X_max是特征中的最小值和最大值。
标准化:此功能列的每个值都按如下方式进行转换:
X_new =(X - Mean)/ StandardDeviation
其中,Mean和StandardDeviation是您的功能的平均值和SD值。
检查哪一个给你更好的结果。如果您的数据具有极端异常值,标准化可能会产生更好的结果。
在sklearn中,您可以使用sklearn.preprocessing.normalize或sklearn.preprocessing.StandardScaler进行转换。
HTH