Machine,SVM)の回帰分析ver(SVR)をパッケージから呼び出すコードと実行結果を載せます。1.SVMとは?2.例題3.いかに正しい予測器を選べば良いか4.コードと結果1.SVMとは?ちゃんとした説明は他のドキュメントで読んでもらえばよいとして、ざっくりと。※理解しなくても使えます(し、私も理解していない。)・1個の「パーセプトロン」を最適化問題として定式化して解く。この際の「マージン最大化」というアイディアがSVMの独自性。・多くの場合、単純なベクトル空間ではなく「カーネル誘導特徴空間」で判別・回帰作業を行なう。これにより、モデルの表現力が増し、SVMは爆発的な流行を見せた(ディープラーニングが流行る前)。・「パーセプトロン」とはもっとも素朴な識別機(私もこの辺りまでなら数学的に追える)であり、これをたくさん使うとk-NN法、直列に重ね合わせて、誤差逆伝播法というアイディアを実装したのが、いわゆるニューラルネットワーク。・最適化問題の適用時のいろんな工夫により、次元の呪いにかからない。局所最適解に陥らない。スパース行列(疎行列)を用いるので計算が速い。・かなり表現力のあるモデルなので、過学習に注意する機構(多くの場合、交差検定(cross-validation)によるパラメータ制御)を使わないと全く使えない。・訓練データ数が少なすぎると使えない。・説明変数-被説明変数に相関関係がある場合はもちろん、非線形な関係であったとしても同じ枠組みで簡単に扱えるので便利。SVMにぶち込んで結果がよければ、「何かしらの関係がある」ということになるので、有用なデータなのかどうかの判別機にもなるのかも。・もちろん機械学習ツールなので、変数間の関係を学習しているだけ。変数の確率分布や、どの変数が効いているかとかを可視化することはできない。説明変数が多くてただぶち込んでいるだけの場合、あまり現象の理解には繋がっていない。・ネット上を見ていると、こういうパッケージを使うのでなくて、自分で式から実装している例もずいぶんと増えて、みんな頭良いなあ、と思う。実装する場合、ラグランジュの未定乗数法という最適化数学の勉強にもなるのでカッコイイ。Dataset)というデータが、scikit-learnのデータセットの中に。英語を呼んだところ、街ごとの統計データからその町の住宅価格(中央値)を当てる、というもの。部屋数の平均や、河川が近いかどうか、黒人が多いかどうか、築年数の平均なんかが説明変数として入っている。詳しくは後で記事にするかも。3.いかに正しい予測器を選べばよいかscikit-learnのドキュメント内でこんなの見つけた(今更)。*1これに従うと、回帰問題の中で「説明変数のうち、被説明変数と関係あるものが少ない」とあらかじめわかっている場合は、Lassoなりを使ってくださいよ、と。LinearSVRから試せよ*2、ということです。SVR(しかも線形じゃないやつ)を使います。タイトルにもあるけれど、機械学習の中での話なので、一般的な統計はまた別のお話(として私は頭の中で整理している。※cross_validationというモジュールを使っているが、データのランダムな分割に使っているだけ。Classication』というLIBSVMの説明書みたいなドキュメントがあったのですが、とりあえず今はリンク切れで見つけることができません。データをまず、6割と4割に分けて、6割のデータだけを使って予測器を訓練します。予測器の訓練でパラメータセッティングのために交差検定を使います。その後、本当に未知データへの予測能力があるのか、を確かめるために、残しておいた4割のデータで答え合わせをしています。APIをPythonで動かしてデータベース自動更新するのを作った...勝った。