虽然我使用机器学习相关术语,但我的问题是100%的工程主题,与统计和数学无关。因此,我在这个论坛中提问,而不是交叉验证。
这是我用来评论问题的示例数据:
X = pd.DataFrame(columns=["F1","F2"],
data=[[23,0.8],
[11,5.35],
[24,19.18],
[15,10.25],
[10,11.30],
[55,44.85],
[15,33.88],
[12,45.30],
[14,22.20],
[15,15.80],
[83,0.8],
[51,5.35],
[34,30.28],
[35,15.25],
[60,13.30],
[75,44.80],
[35,30.77],
[62,40.33],
[64,23.40],
[14,11.80]])
y = pd.DataFrame(columns=["y"],
data=[[0],
[0],
[1],
[0],
[2],
[2],
[2],
[1],
[0],
[1],
[0],
[0],
[1],
[0],
[1],
[0],
[1],
[1],
[0],
[2]])
我应该将数据分为训练集和测试集。经典的方法是
train_test_split
功能
sklearn
:
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.25)
但我想指定要分配给培训和测试集的记录的百分比。下面将解释更多详细信息。
在我的例子中,我处理一个多类分类问题,其中
y
可以采用3个不同值之一:0、1、2。值为2的记录非常罕见(在我的实际数据集中,大约占整个数据集的3%)。因此,这是一个不平衡的分类问题。
由于这是一个不平衡的分类问题,稀有类的记录非常重要。因此我想更新
model_selection.train_test_split
如下:我想为培训和测试集分配每节课记录的百分比。
例如,<50%、60%、90%>意味着90%的稀有课程记录被分配给培训组。
例如,在我的示例中,我希望获得
Y
等于
2
在训练集中(
X_train
,
y_train
)和1个记录。
我在谷歌上搜索类似的问题,但没有发现任何问题。
为了解决这个问题,我对初始数据帧进行了无序处理:
df = pd.concat([X, y], axis=1)
df = df.sample(frac=1).reset_index(drop=True)
但是,我不知道如何继续执行其余的任务。也许有一些sklearn内置函数或库可以解决这个问题?