ロジスティック回帰をサブセットデータセットに適合させていました。データセットを分割してモデルをフィッティングした後、次のエラーメッセージが表示されました。
/Users/Eddie/anaconda/lib/python3.4/site-packages/sklearn/utils/validation.py:526: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel(). y = column_or_1d(y, warn=True)
したがって、target_newrdn = target_newrdn.ravel()
を使用してターゲット変数を変更しますが、次のようになります。
AttributeError: 'DataFrame' object has no attribute 'ravel'
問題は何で、どうすれば修正できますか?誰か助けてもらえますか?
私のコード:
from sklearn.datasets import fetch_covtype
import numpy as np
import pandas as pd
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split
cov = fetch_covtype()
cov_data = pd.DataFrame(cov.data)
cov_target = pd.DataFrame(cov.target)
data_newrdn = cov_data.head(n=10000)
target_newrdn = cov_target.head(n=10000)
target_newrdn = target_newrdn.ravel() ## I thought this could fix it??
X_train2, X_test2, y_train2, y_test2 = train_test_split(data_newrdn,
target_newrdn, random_state=42)
scaler.fit(X_train2)
X_train_scaled2 = scaler.transform(X_train2)
# Logistic Regression
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]}
print(param_grid)
grid = GridSearchCV(LogisticRegression(), param_grid, cv=kfold)
grid.fit(X_train_scaled2, y_train2)
print("Best cross-validation score w/ kfold:
{:.2f}".format(grid.best_score_))
print("Best parameters: ", grid.best_params_)
明らかに、データフレームにはravel
関数がありません。試してください:
_target_newrdn.values.ravel()
_
_target_newrdn.values
_はnumpy ndarrayを返し、その上でravel
を実行します。これはフラット化されたnumpy配列を返すことに注意してください。データフレームに戻す必要がある場合があります。
ただし、代わりにflatten()
が必要だと思います。これは、コピーを返すため、ravelによって返された配列を変更しても、元の配列のエントリは変更されないためです。