2017-07-31 83 views
0

我试图适应sklearn载体,但我收到此错误:ValueError异常:未知的不支持多类因变量

ValueError: unknown is not supported This is my code:

X = df_features.values 
    X = X.reshape((len(X),len(df_features.columns))) 
    Y = df_train['action'].values 
    Y = Y.reshape((len(Y),)) 

pipeline = Pipeline([ 
('clf', RandomForestClassifier()) 
]) 

parameters = { 
    'clf__max_depth': [5,7,9], 
    'clf__max_features': [3,4,5], 
    'clf__min_samples_leaf': [3,4,5,6,7], 
    'clf__bootstrap': [True] 
} 

score_func = make_scorer(metrics.f1_score,average='weighted') 

grid_search = GridSearchCV(pipeline, parameters, n_jobs=3, 
    verbose=1, scoring=score_func) 

grid_search.fit(X, Y) 

这是Y采样数据:

['NOTHING', 'NOTHING', 'SELL', 'SELL', 'NOTHING', 'NOTHING', 'NOTHING']

我该如何解决这个问题?
谢谢

+0

你必须使用二值化到Y二值化,以0和1。如果您上传您的数据,我可以提供一个示例 – sera

+0

@sera。它不是必需的。 scikit-learn估计器自动处理类标签的转换。 –

+0

'Y'的类型是什么。显示“type(Y)'。在试穿之前试试'Y = Y.astype('str')'。 –

回答

0

请检查x和y的类型和大小。另外,您是否有足够的样本来获取所需的max_depth和min_samples_leaf?

以下示例似乎正常工作。我使用了虹膜数据,并将一个交叉验证作为一个例子。

from sklearn.pipeline import Pipeline 
from sklearn.model_selection import GridSearchCV 
from sklearn.metrics import fbeta_score, make_scorer 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.datasets import load_iris 
import numpy as np 
from sklearn import metrics 
from sklearn.model_selection import LeaveOneOut 


loo= LeaveOneOut() 
data = load_iris() 

x = data.data 
x = x[0:14,:] 
x.shape 

y = ['NOTHING', 'NOTHING', 'SELL', 'SELL', 'NOTHING', 'NOTHING','SELL','SELL','NOTHING','SELL','SELL','NOTHING','NOTHING','NOTHING'] 
y = np.asarray(y) 
y = y.reshape(14,1) 
y = y.astype('str') 


pipeline = Pipeline([ ('clf', RandomForestClassifier())]) 

parameters = {'clf__max_depth': [1,2,3], 'clf__max_features': [1,2,3], 'clf__min_samples_leaf': [1,2,3], 'clf__bootstrap': [True] } 

score_func = make_scorer(metrics.f1_score,average='weighted') 

grid_search = GridSearchCV(pipeline, parameters, n_jobs=1 , verbose=1, scoring=score_func, cv = loo) 

grid_search.fit(x, y) 

结果

Fitting 14 folds for each of 45 candidates, totalling 630 fits 
[Parallel(n_jobs=1)]: Done 630 out of 630 | elapsed: 33.7s finished 

希望这有助于

+0

我的代码在我的本地机器上工作正常,当我将系统部署到EC2机器时,出现此错误 –

+0

您是否在本地和EC2机器中使用完全相同的版本? – sera

相关问题