如何使用留一法预测多列的Y值,使用SKlearn?

我有一个示例数据框,如下所示。Y列全部包含0,1的二元结果。X是从x_1到x_13的列。

     x_1 x_2  ... x_13   y_1  y_2  y_3 ... y_48  1   0.1 0.2  .... 0.1     0    1    0 .... 0 2   0.5 0.2 ....  0.2     1    0    1 .... 1     ...100  0.1 0.0 ....  0.5     0    1    0  ....0

我对机器学习方法还不太熟悉。我计划使用留一法来计算F1分数。如果不使用留一法,我们可以使用下面的代码:

accs = []for i in range(48):    Y = df['y_{}'.format(i+1)]    model = RandomForest()    model.fit(X, Y)    predicts = model.predict(X)    accs.append(f1(predicts,Y))    print(accs)

结果输出的是[1,1,1….1]。我如何将留一法纳入其中,确保我们只打印出一个平均F1分数,比如0.45?


回答:

示例数据集:

import pandas as pdimport numpy as npnp.random.seed(111)df = pd.concat([pd.DataFrame(np.random.uniform(0,1,(100,10)),columns = ["x_" + str(i) for i in np.arange(1,11)]),pd.DataFrame(np.random.binomial(1,0.5,(100,5)),columns = ["y_" + str(i) for i in np.arange(1,6)])],axis=1)X = df.filter(like="x_")

然后,您可以使用cross_val_predictKFold来获取每折的预测。将分割数设置为与您的观测数相同:

from sklearn.model_selection import cross_val_predict, KFoldfrom sklearn.ensemble import RandomForestClassifier from sklearn.metrics import f1_scoreaccs = []result = []loocv = KFold(len(X))for i in range(5):    Y = df['y_{}'.format(i+1)]    model = RandomForestClassifier()    fold_pred = cross_val_predict(model, X, Y, cv=loocv)    result.append(f1_score(Y,predicts))    model.fit(X, Y)    predicts = model.predict(X)    accs.append(f1_score(Y,predicts))    print(result)[0.5, 0.5871559633027522, 0.5585585585585585, 0.5585585585585585, 0.5871559633027522]

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注