Estou tentando usar o módulo sklearn_pandas para estender o trabalho que faço nos pandas e mergulhar no aprendizado de máquina, mas estou com um erro que realmente não entendo como corrigir.
Eu estava trabalhando no seguinte conjunto de dados no Kaggle .
É essencialmente uma tabela sem cabeçalho (1000 linhas, 40 recursos) com valores de ponto flutuante.
import pandas as pdfrom sklearn import neighbors
from sklearn_pandas import DataFrameMapper, cross_val_score
path_train ="../kaggle/scikitlearn/train.csv"
path_labels ="../kaggle/scikitlearn/trainLabels.csv"
path_test = "../kaggle/scikitlearn/test.csv"
train = pd.read_csv(path_train, header=None)
labels = pd.read_csv(path_labels, header=None)
test = pd.read_csv(path_test, header=None)
mapper_train = DataFrameMapper([(list(train.columns),neighbors.KNeighborsClassifier(n_neighbors=3))])
mapper_train
Resultado:
DataFrameMapper(features=[([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39], KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
n_neighbors=3, p=2, weights='uniform'))])
Por enquanto, tudo bem. Mas então eu tento o ajuste
mapper_train.fit_transform(train, labels)
Resultado:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-e3897d6db1b5> in <module>()
----> 1 mapper_train.fit_transform(train, labels)
//anaconda/lib/python2.7/site-packages/sklearn/base.pyc in fit_transform(self, X, y, **fit_params)
409 else:
410 # fit method of arity 2 (supervised transformation)
--> 411 return self.fit(X, y, **fit_params).transform(X)
412
413
//anaconda/lib/python2.7/site-packages/sklearn_pandas/__init__.pyc in fit(self, X, y)
116 for columns, transformer in self.features:
117 if transformer is not None:
--> 118 transformer.fit(self._get_col_subset(X, columns))
119 return self
120
TypeError: fit() takes exactly 3 arguments (2 given)`
O que estou fazendo errado? Embora os dados neste caso sejam todos iguais, estou planejando criar um fluxo de trabalho para misturas de recursos de ponto categórico, nominal e de ponto flutuante e sklearn_pandas parecia um ajuste lógico.
python
pandas
scikit-learn
elksie5000
fonte
fonte
Respostas:
Aqui está um exemplo de como obter pandas e aprender a jogar bem
digamos que você tenha 2 colunas que são ambas cadeias e deseja vetorizar - mas não tem idéia de quais parâmetros de vetorização resultarão no melhor desempenho a jusante.
crie o vetorizador
crie o objeto DataFrameMapper.
este é o pipeline completo
defina os parâmetros que você deseja que a verificação considere
É isso aí! - observe, no entanto, que mapper_features é um item único neste dicionário - portanto, use um loop for ou itertools.product para gerar uma lista FLAT de todas as opções to_vect que você deseja considerar - mas essa é uma tarefa separada fora do escopo da pergunta.
Continue criando o classificador ideal ou o que mais o seu pipeline terminar com
fonte
Eu nunca usei
sklearn_pandas
, mas ao ler o código-fonte, parece que isso é um bug do lado deles. Se você procurar a função que está lançando a exceção , poderá observar que elas estão descartando oy
argumento (ele nem sobrevive até a sequência de caracteres), e afit
função interna espera mais um argumento, o que provavelmente éy
:Eu recomendo que você abra um problema no rastreador de erros .
ATUALIZAÇÃO :
Você pode testar isso se executar seu código no IPython. Para resumir, se você usar a
%pdb on
mágica imediatamente antes de executar a chamada problemática, a exceção será capturada pelo depurador Python, para que você possa brincar um pouco e ver se a chamada dafit
função com os valores de rótuloy[0]
funciona - veja a última linha com opdb>
prompt. (Os arquivos CSV são baixados do Kaggle, exceto o maior, que é apenas uma parte do arquivo real).fonte
pdb
:)