修正方法がわからない。どんな助けも感謝します。私は ベクトル化:有効なコレクションではありません を見ましたが、これを理解しているかどうかはわかりません
train = df1.iloc[:,[4,6]]
target =df1.iloc[:,[0]]
def train(classifier, X, y):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)
classifier.fit(X_train, y_train)
print ("Accuracy: %s" % classifier.score(X_test, y_test))
return classifier
trial1 = Pipeline([
('vectorizer', TfidfVectorizer()),
('classifier', MultinomialNB()),
])
train(trial1, train, target)
以下のエラー:
----> 6 train(trial1, train, target)
<ipython-input-140-ac0e8d32795e> in train(classifier, X, y)
1 def train(classifier, X, y):
----> 2 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)
3
4 classifier.fit(X_train, y_train)
5 print ("Accuracy: %s" % classifier.score(X_test, y_test))
/home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/model_selection/_split.py in train_test_split(*arrays, **options)
1687 test_size = 0.25
1688
-> 1689 arrays = indexable(*arrays)
1690
1691 if stratify is not None:
/home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in indexable(*iterables)
204 else:
205 result.append(np.array(X))
--> 206 check_consistent_length(*result)
207 return result
208
/home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in check_consistent_length(*arrays)
175 """
176
--> 177 lengths = [_num_samples(X) for X in arrays if X is not None]
178 uniques = np.unique(lengths)
179 if len(uniques) > 1:
/home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in <listcomp>(.0)
175 """
176
--> 177 lengths = [_num_samples(X) for X in arrays if X is not None]
178 uniques = np.unique(lengths)
179 if len(uniques) > 1:
/home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in _num_samples(x)
124 if len(x.shape) == 0:
125 raise TypeError("Singleton array %r cannot be considered"
--> 126 " a valid collection." % x)
127 return x.shape[0]
128 else:
TypeError: Singleton array array(<function train at 0x7f3a311320d0>, dtype=object) cannot be considered a valid collection.
____
修正方法がわからない。どんな助けも感謝します。私は ベクトル化:有効なコレクションではありません を見ましたが、これを理解しているかどうかはわかりません
このエラーは、関数train
が変数train
をマスクするために発生し、それ自体に渡されます。
説明:
次のように変数トレインを定義します。
train = df1.iloc[:,[4,6]]
次に、いくつかの行の後、次のようなメソッドトレインを定義します。
def train(classifier, X, y):
実際に起こることは、以前のバージョンのtrain
が新しいバージョンで更新されることです。これは、train
が必要に応じてDataframeオブジェクトを指すのではなく、定義した関数を指すことを意味します。エラーではクリアされます。
array(<function train at 0x7f3a311320d0>, dtype=object)
エラーステートメント内のfunction trainを参照してください。
ソリューション:
それらの1つ(変数またはメソッド)の名前を変更します。 提案:関数の名前をtraining
やtraining_func
などの別の名前に変更します。
別のコンテキストで同じエラーが発生しました(sklearn train_test_split
)理由は、単にキーワード引数として位置引数を渡したために、呼び出された関数が誤って解釈されたためです。
最初の答えのバリエーション-これを取得できる別の理由は、データの列名がデータを含むオブジェクトの属性/メソッドと同じ場合です。
私の場合、表面上正当な構文df.countを使用して、データフレーム「df」の列「count」にアクセスしようとしました。
ただし、countはpandasデータフレームオブジェクトの属性と見なされます。名前の衝突により、(ややこしい)エラーが発生します。
sklearn.model_selection train_test_split
でも同じエラーが発生しましたが、私の場合、sparkデータフレームの配列ではなく、Pandasデータフレームから派生した配列を関数に提供していたためです。以下のようなtoPandas()関数を使用してデータをpandasデータフレームに変換し、Pandas dfをtrain_test_splitに提供すると、問題は修正されました。
pandas_df=spark_df.toPandas()
エラー:
features_to_use = ['Feature1', 'Feature2']
x5D = np.array(spark_df[ features_to_use ])
y5D = np.array(spark_df['TargetFeature'])
X_train, X_test, y_train, y_test = train_test_split(x5D, y5D, train_size=0.8)
一定:
pandas_df=spark_df.toPandas()
features_to_use = ['Feature1', 'Feature2']
x5D = np.array(pandas_df[ features_to_use ])
y5D = np.array(pandas_df['TargetFeature'])
X_train, X_test, y_train, y_test = train_test_split(x5D, y5D, train_size=0.8)