what scikit que predicciones metodos machine learning learn espaƱol ejemplo clasificador clasificacion algoritmo python numpy scikit-learn kaggle

python - scikit - ValueError: unknown no se admite en sklearn.RFECV



que es scikit learn (1)

Estaba tratando de reducir el número de funciones realmente relevantes para mi clasificador usando rfecv. Este es el código que he escrito

import sklearn import pandas as p import numpy as np import scipy as sp import pylab as pl from sklearn import linear_model, cross_validation, metrics from sklearn.svm import SVC from sklearn.feature_selection import RFECV from sklearn.metrics import zero_one_loss from sklearn import preprocessing #from sklearn.feature_extraction.text import CountVectorizer #from sklearn.feature_selection import SelectKBest, chi2 modelType = "notext" # ---------------------------------------------------------- # Prepare the Data # ---------------------------------------------------------- training_data = np.array(p.read_table(''F:/NYC/NYU/SM/3/SNLP/Project/Data/train.tsv'')) print ("Read Data/n") # get the target variable and set it as Y so we can predict it Y = training_data[:,-1] print(Y) # not all data is numerical, so we''ll have to convert those fields # fix "is_news": training_data[:,17] = [0 if x == "?" else 1 for x in training_data[:,17]] # fix -1 entries in hasDomainLink training_data[:,14] = [0 if x =="-1" else x for x in training_data[:,10]] # fix "news_front_page": training_data[:,20] = [999 if x == "?" else x for x in training_data[:,20]] training_data[:,20] = [1 if x == "1" else x for x in training_data[:,20]] training_data[:,20] = [0 if x == "0" else x for x in training_data[:,20]] # fix "alchemy category": training_data[:,3] = [0 if x=="arts_entertainment" else x for x in training_data[:,3]] training_data[:,3] = [1 if x=="business" else x for x in training_data[:,3]] training_data[:,3] = [2 if x=="computer_internet" else x for x in training_data[:,3]] training_data[:,3] = [3 if x=="culture_politics" else x for x in training_data[:,3]] training_data[:,3] = [4 if x=="gaming" else x for x in training_data[:,3]] training_data[:,3] = [5 if x=="health" else x for x in training_data[:,3]] training_data[:,3] = [6 if x=="law_crime" else x for x in training_data[:,3]] training_data[:,3] = [7 if x=="recreation" else x for x in training_data[:,3]] training_data[:,3] = [8 if x=="religion" else x for x in training_data[:,3]] training_data[:,3] = [9 if x=="science_technology" else x for x in training_data[:,3]] training_data[:,3] = [10 if x=="sports" else x for x in training_data[:,3]] training_data[:,3] = [11 if x=="unknown" else x for x in training_data[:,3]] training_data[:,3] = [12 if x=="weather" else x for x in training_data[:,3]] training_data[:,3] = [999 if x=="?" else x for x in training_data[:,3]] print ("Corrected outliers data/n") # ---------------------------------------------------------- # Models # ---------------------------------------------------------- if modelType == "notext": print ("no text model/n") #ignore features which are useless X = training_data[:,list([3, 5, 6, 7, 8, 9, 10, 14, 15, 16, 17, 19, 20, 22, 25])] scaler = preprocessing.StandardScaler() print("initialized scaler /n") scaler.fit(X,Y) print("fitted train data and labels/n") X = scaler.transform(X) print("Transformed train data/n") svc = SVC(kernel = "linear") print("Initialized SVM/n") rfecv = RFECV(estimator = svc, cv = 5, loss_func = zero_one_loss, verbose = 1) print("Initialized RFECV/n") rfecv.fit(X,Y) print("Fitted train data and label/n") rfecv.support_ print ("Optimal Number of features : %d" % rfecv.n_features_) savetxt(''rfecv.csv'', rfecv.ranking_, delimiter='','', fmt=''%f'')

En la llamada de "rfecv.fit (X, Y)" mi código arroja un error desde el archivo metrices.py "ValueError: unknown no es compatible"

El error brota en sklearn.metrics.metrics :

# No metrics support "multiclass-multioutput" format if (y_type not in ["binary", "multiclass", "multilabel-indicator", "multilabel-sequences"]): raise ValueError("{0} is not supported".format(y_type))

Este es un problema de clasificación, los valores objetivo solo son 0 o 1. El conjunto de datos se puede encontrar en Kaggle Competition Data

Si alguien puede señalar dónde estoy yendo mal, lo agradecería.


RFECV comprueba que los datos de destino / tren sean de uno de los tipos binary , multiclass , multilabel-indicator o multilabel-sequences :

  • ''binary'': y contiene <= 2 valores discretos y es 1d o un vector de columna.
  • ''multiclass'': y contiene más de dos valores discretos, no es una secuencia de secuencias, y es 1d o un vector de columna.
  • ''multiplicidad-salida múltiple'': y es una matriz 2d que contiene más de dos valores discretos, no es una secuencia de secuencias, y ambas dimensiones son de tamaño> 1.
  • ''multilabel-indicator'': y es una matriz de indicadores de etiquetas, una matriz de dos dimensiones con al menos dos columnas y, como máximo, 2 valores únicos.

mientras tu Y es unknown , eso es

  • ''desconocido'': y es similar a una matriz, pero ninguno de los anteriores, como una matriz 3D o una matriz de objetos que no son de secuencia.

El motivo es que los datos de destino son cadenas (del formulario "0" y "1" ) y se cargan con read_table como objeto:

>>> training_data[:, -1].dtype dtype(''O'') >>> type_of_target(training_data[:, -1]) ''unknown''

Para resolver el problema, puede convertir a int :

>>> Y = training_data[:, -1].astype(int) >>> type_of_target(Y) ''binary''