質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.32%

[kaggle x Titanic]うっすらピンクの背景でDataConversionWarning

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,704

Yukiya025

score 80

 開発環境

  • Python3.6.5
  • Jupyter notebook
  • Windows7

 困っていること

kaggleのTitanic課題kernelを写経して提出までこぎつけました。が、警告をガン無視して進めたので今から警告に対する対処をしようとしています。
写経対象: A Data Science Framework: To Achieve 99% Accuracy 

 一次元配列なのに列ベクトルyを渡されて困るから変えろ?

該当コード

#Machine Learning Algorithm (MLA) Selection and Initialization
MLA = [
    ensemble.AdaBoostClassifier(),
    ensemble.BaggingClassifier(),
    ensemble.ExtraTreesClassifier(),
    ensemble.GradientBoostingClassifier(),
    ensemble.RandomForestClassifier(),

    gaussian_process.GaussianProcessClassifier(),

    linear_model.LogisticRegressionCV(),
    linear_model.PassiveAggressiveClassifier(),
    linear_model.RidgeClassifierCV(),
    linear_model.SGDClassifier(),
    linear_model.Perceptron(),

    naive_bayes.BernoulliNB(),
    naive_bayes.GaussianNB(),

    neighbors.KNeighborsClassifier(),

    svm.SVC(probability=True),
    svm.NuSVC(probability=True),
    svm.LinearSVC(),

    tree.DecisionTreeClassifier(),
    tree.ExtraTreeClassifier(),

    discriminant_analysis.LinearDiscriminantAnalysis(),
    discriminant_analysis.QuadraticDiscriminantAnalysis(),

    XGBClassifier()
]

cv_split = model_selection.ShuffleSplit(n_splits = 10, test_size = .3, train_size = .6, random_state = 0)

MLA_columns = ['MLA Name', 'MLA Parameters', 'MLA Train Accuracy Mean', 'MLA Test Accuracy Mean', 'MLA Test Accuracy 3*STD', 'MLA Time']
MLA_compare = pd.DataFrame(columns = MLA_columns)

MLA_predict = data1[Target]

row_index = 0
for alg in MLA:
    MLA_name = alg.__class__.__name__
    MLA_compare.loc[row_index, 'MLA Name'] = MLA_name
    MLA_compare.loc[row_index, 'MLA Parameters'] = str(alg.get_params())

    cv_results = model_selection.cross_validate(alg, data1[data1_x_bin], data1[Target], cv = cv_split)

    MLA_compare.loc[row_index, 'MLA Time'] = cv_results['fit_time'].mean()
    MLA_compare.loc[row_index, 'MLA Train Accuracy Mean'] = cv_results['train_score'].mean()
    MLA_compare.loc[row_index, 'MLA Test Accuracy Mean'] = cv_results['test_score'].mean()

    MLA_compare.loc[row_index, 'MLA Test Accuracy 3*STD'] = cv_results['test_score'].std()*3

    alg.fit(data1[data1_x_bin], data1[Target])
    MLA_predict[MLA_name] = alg.predict(data1[data1_x_bin])

    row_index += 1


MLA_compare.sort_values(by = ['MLA Test Accuracy Mean'], ascending = False, inplace = True)
MLA_compare

警告文
同じ内容の文が重複して出てくるので一部だけですが、このような警告文が延々と出てきます。values.ravel()をつければよいとの対処法?は見つけましたが、どれにつけたらよいかが分からない状態ですorz お知恵をお貸しください(>_<)

C:\Users\ayumusato\Anaconda3\lib\site-packages\sklearn\utils\validation.py:578: 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)
C:\Users\ayumusato\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py:458: 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().
  estimator.fit(X_train, y_train, **fit_params)
C:\Users\ayumusato\Anaconda3\lib\site-packages\ipykernel_launcher.py:56: 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().

 Target = ['Survived'] としているコード周辺

label = LabelEncoder()
for dataset in data_cleaner:
    dataset['Sex_Code'] = label.fit_transform(dataset['Sex'])
    dataset['Embarked_Code'] = label.fit_transform(dataset['Embarked'])
    dataset['Title_Code'] = label.fit_transform(dataset['Title'])
    dataset['AgeBin_Code'] = label.fit_transform(dataset['AgeBin'])
    dataset['FareBin_Code'] = label.fit_transform(dataset['FareBin'])

Target = ['Survived'] #←ここ

data1_x = ['Sex', 'Pclass', 'Embarked', 'Title', 'SibSp', 'Parch', 'Age', 'Fare', 'FamilySize', 'IsAlone']
data1_x_calc = ['Sex_Code', 'Pclass', 'Embarked_Code', 'Title_Code', 'SibSp', 'Parch', 'Age', 'Fare']
data1_xy = Target + data1_x #←ここ
print('Original X Y: ', data1_xy, '\n')

data1_x_bin = ['Sex_Code', 'Pclass', 'Embarked_Code', 'Title_Code', 'FamilySize', 'AgeBin_Code', 'FareBin_Code']
data1_xy_bin = Target + data1_x_bin
print('Bin X Y: ', data1_xy_bin, '\n')

data1_dummy = pd.get_dummies(data1[data1_x])
data1_x_dummy = data1_dummy.columns.tolist()
data1_xy_dummy = Target + data1_x_dummy
print('Dummy X Y: ', data1_xy_dummy, '\n')

data1_dummy.head()

 list、データフレーム、numpy配列などの使い分け

Pythonの組込関数であるリスト([オブジェクト1, オブジェクト2, ...])は、要素としてあらゆるオブジェクトを持つことが可能。
→複数のオブジェクトをまとめて管理。
参考サイト: リストオブジェクト -PythonWeb

Pandasのデータを格納するオブジェクトDataFrameは、二次元配列に相当する。Seriesをラベリングしてディクショナリのように寄せ集めるとDataFrameになる。行と列のある表みたいな感じ。
DataFrameオブジェクトのdata部分を指定するには、NumPyの配列・Seriesを含む辞書などが使える。データ部分の指定方法は多岐にわたる。
ちなみに一次元配列はSeries。
参考サイト:Pandasのデータを格納するオブジェクトDataFrameを理解する -DeepAge

NumPy配列 (N-dimensional array/ndarray) は同じ型&サイズの項目で構成する固定長の多次元コンテナ。
参考サイト: The N-dimensional array (ndarray)

 listとnumpy配列の違い

この質問&回答を参照。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

A column-vector y was passedということなので怪しいのはdata1[Target]でしょうか。

  • Targetの中身は何ですか
  • print(data1[Target].shape)はどうなりますか

以上2点確認してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/17 11:17

    hayataka2049さま、お久しぶりです^^/

    ありがとうございます(*≧∀≦) できましたー!

    > MLA_nameはstrであり、MLA_predictはDataFrameなのでstrのインデックスが使えますが、Numpy配列にしちゃったら無理です。

    .values.ravel()をつけると文字列型から配列型になるからダメ、配列型にして問題ないところのみ.values.ravel()が使えるということですか∑o(*'o'*)o

    このセル以外にもうっすらピンクで同じようなDataConversionWarningがでてるので、そこも修正してみようと思います!

    パソコンも20時間超の健闘の末、SSDに換装することができました<3 さくさく動くようになって快適です!

    キャンセル

  • 2018/09/17 14:18

    list、データフレーム、numpy配列などの使い分けを意識するといいのかもしれませんね。なんとなく同じ感覚で使えてしまいますが、本来はまったくの別物なので

    キャンセル

  • 2018/09/17 16:43

    > list、データフレーム、numpy配列などの使い分けを意識するといい
    ありがとうございます(*≧∀≦) 質問の最後にlist、データフレーム、numpy配列について調べて理解したことを簡潔にまとめてみました! listとnumpy配列の違いがわからなかったのですが、こちらの質問&回答(https://teratail.com/questions/73677)でうっすらわかった気がします。

    さあそれでどう使い分けるかとまではまだ理解していませんが、写経したものがきれいになったらこの3つは違うのだということを頭に入れて、見直そうと思いました! ヾ(*≧∀≦)ノ゙

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る