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

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

ただいまの
回答率

90.50%

  • Python

    11784questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    9862questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Python 2.7

    1458questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

  • 機械学習

    964questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

X has 2 features per sample; expecting 2246のエラーの対処方法

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,094

benkyouchuu

score 16

現在、scikit-learnを使ってロジステっく回帰モデルのトレーニングをしています。

決定領域、トレーニングサンプル、テストサンプルをプロットしたいと考えいます。

ですが、

 plot_decision_regions(X_combined_std,Y_combined_std,classifier=lr, test_idx=range(105,150))
  File "sample.py", line 222, in plot_decision_regions
    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
  File "/Library/Python/2.7/site-packages/sklearn/linear_model/base.py", line 324, in predict
    scores = self.decision_function(X)
  File "/Library/Python/2.7/site-packages/sklearn/linear_model/base.py", line 305, in decision_function
    % (X.shape[1], n_features))
ValueError: X has 2 features per sample; expecting 2246

と出てしまい、表示できません。

全体のコード

def age_machine_learning(db):
    dates = []
    age_labels = []
    dictionary = get_dictionary(db)
    for age in range(1, 3):
        descriptions = []
        for data in db.profile.find({"age": age*10}):
            descriptions.append(data['description'].encode(
                'utf-8')+data['screen_name'].encode('utf-8'))
        tagger = MeCab.Tagger('-Ochasen')
        a = list(descriptions)
        for description in a:
            words = []
            nodes = tagger.parseToNode(description)
            while nodes:
                if nodes.feature.split(',')[0] == '名詞':
                    word = nodes.surface.decode('utf-8')
                    words.append(json.dumps(word, ensure_ascii=False))
                nodes = nodes.next
            age_labels.append(age)
            tmp = dictionary.doc2bow(words)
            dense = list(gensim.matutils.corpus2dense(
                [tmp], num_terms=len(dictionary)).T[0])
            dates.append(dense)
    X_train, X_test, y_train, y_test = train_test_split(dates, age_labels, test_size=0.3)
    lr = LogisticRegression(C=1000.0, random_state=0)
    sc = StandardScaler()
    sc.fit(X_train)
    X_train_std = sc.transform(X_train)
    X_test_std = sc.transform(X_test)
    lr.fit(X_train_std, y_train)
    X_combined_std = np.vstack((X_train_std, X_test_std))
    Y_combined_std =np.hstack((y_train, y_test))
    plot_decision_regions(X_combined_std,Y_combined_std,classifier=lr, test_idx=range(105,150))
    plt.xlabel('petal length')
    plt.ylabel('patal width')
    plt.legend(loc='upper left')
    plt.show()
    '''
    compare_classifiers(dates, age_labels)
    '''

def plot_decision_regions(X,y,classifier,test_idx,resolution=0.02):
    markers = ('s', 'x', 'o', '^', 'V')
    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
    cmap = ListedColormap(colors[:len(np.unique(y))])

    x1_min, x1_max = X[:,0].min() -1, X[:,0].max()+1
    x2_min, x2_max = X[:,1].min() -1, X[:,1].max()+1

    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max,resolution),np.arange(x2_min, x2_max,resolution))
    print np.array([xx1.ravel(), xx2.ravel()]).T
    print len(np.array([xx1.ravel(), xx2.ravel()]).T)
    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
    Z = Z.reshape(xx1.shape)
    plt.contourf(xx1,xx2,Z,alpha=0.4,cmap=cmap)
    plt.xlim(xx1.min(), xx1.max())
    plt.ylim(xx2.min(),xx2.max())

    for idx,cl in enumerate(np, unique(y)):
        plt.scatter(x=X[y==cl, 0],y=X[y==cl, 1],alpha=0.8, c = cmap(idx),marker = markers[idx], label=cl)

    if test_idx:
        X_test, Y_test = X[test_idx, :],y[test_idx]
        plt.scatter(X_test[:, 0],X_test[:, 1], c='',alpha=1.0, linewidths=1, marker='o', s=55, label='test set')

呼び出しているのは、age_machine_learningメソッド、実際にプロットの処理はplot_decision_regionsです。

よろしくお願いします。

できれば早い解決をしたいと考えています。お手伝いをよろしくお願いします。

参考にしたサイト

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
のサイズを確認してください。

X has 2 features per sample; expecting 2246
モデルを作ったときはサンプルあたり2246個値があったのに、今は2つしかありません。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/31 13:52 編集

    サイズが確認できなかったのですが、
    (np.array([xx1.ravel(), xx2.ravel()])は2でした。

    調べたところ、モデルを作ったときのサンプルに配列が二次元配列になっていて
    len(X_combined_std) = 4697
    len(X_combined_std[0]) = 2246
    でした。
    X_combined_std.shape[1]=2246を二次元の表で表すのは無理なのでしょうか?

    キャンセル

  • 2018/01/31 16:03

    普通に考えると無理ですね。
    2246次元のグラフを2次元にプロットすることはできません。

    学習の方法を変える必要があります。
    https://pythondatascience.plavox.info/scikit-learn/scikit-learnで決定木分析
    https://fisproject.jp/2016/07/regression-tree-in-python/
    決定木であれば入力の次元に依存しません。

    または、
    http://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition
    を使って次元を2次元に圧縮してから学習させることもできます。

    キャンセル

  • 2018/01/31 16:55

    ありがとうございます。
    一番精度がよかったためチャレンジしたのですが、残念です。
    2次元に圧縮するというのは、メソッドを使ってですか?
    組み合わせてでしょうか?

    キャンセル

  • 2018/01/31 17:38

    PCA主値を使った場合ですが、
    先にXを2本の特徴ベクトルで表現するように変換します。
    そして、その係数を取ることで2次元にすることができます。

    それをモデルの入力値として使用します。
    必ずしも上位2つを取らなくても良いかもしれません。

    ---

    ロジスティック回帰で良い結果が出るのであれば決定木を使っても良い結果が得られるはずです。
    BoWならそっちのほうが自然かもしれません。

    キャンセル

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

  • Python

    11784questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    9862questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Python 2.7

    1458questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

  • 機械学習

    964questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。