質問: 度々お世話になっております。 scikit-learnのSVMでの分類結果を散布図にしています。 分類境界を可視化したく、下記のようなことをやってみました。 同様のことをされている方のブログ等を参考に、 データの最大/最小値から無数のグリッド状に配置した データをSVMに再投入して得た分類結果を等高線で描画する可視化を試みました。 SVMにデータを再投入して得たデータを下表のようにデータフレーム化し、 通常の散布図にしたところ、ドットで埋められた分類境界の描画はできました。 | value1 | value2 | Group | | --- | --- | --- | | 100 | 200 | 0 | | 200 | 100 | 0 | | 200 | 500 | 1 | | 300 | 800 | 0 | GroupはSVMでの分類結果で数値はダミーです。 これを、ドットの散布図ではなく、等高線またはカラーチャートに したいと考えております。 (X,Y,Zがそれぞれ、value1,value2,Groupとなる図) matplotlibのplt.contour(X, Y, Z)等を使うと思うのですが、 下記のようなエラーが発生してしまいます。 TypeError: Input z must be a 2D array. TypeError: Length of x must be number of columns in z Zに当たるGroupの扱いが良くないのか、データフレーム化してはいけな いのか... ご教示頂きたく、よろしくお願いいたします。
回答: plt.contourだとnumpyのmeshgridを使わないといけません。 コードの書き方については、こちらなどを参考にしてください。 Classifier comparison — scikit-learn 0.19.2 documentation