Weka の学習ルーチンに,前処理・可視化の部分を強化したYaleが,Rapid-I 社がオープンソースで開発している RapidMiner になった.
さらに今は社名も RapidMiner になった.
- Community Edition は無料でオープンソースで 5.x
- 6.x 移行は製品で,機能制限版で無償のStarter版と,有償のものとがある.無償版は読めるファイルが CSV/Excel でDBアクセスなしの小規模データのみ.
Version 5.x のCommunity Edition について†
- 便利にできている.アルゴリズムをいじらないで分析だけする人にはおすすめ.
- Helpメニューからは,Wikiやビデオなどの他の資料へのアクセスができる.Wikiは結構ユーザがいることが伺える.
- 下の方にエラーが出てくるが,対処法が提案されてるので,あまり迷わない.
- ブースティングとかをメタ学習っていうな〜アンサンブル学習だ.メタ学習は学習のための知識であるメタ知識を獲得する学習のことだよ〜.
- 可視化で決定面を書く機能と,クラス条件付きでない特徴の分布の表示があったらいいのに
- Look&Feel が変えられず,フォントが細くてジャギーがあって読みにくい.Wikiにも同様の要望を持った人がいるようだったが,解決策はなさそう.
- Process のParameter設定の parallelize main process など並列実行オプションがある.マルチコアのありがたみをしみじみ実感.Preference でスレッドの最大数を指定しておけばコアを全部使われないようにも制限できる.
- KNIMEと比べて,拡張性はKNIMEが上で,ヒントやサンプルなどアシスト系の部分はRapidMinerが上な気がする.実験・研究系はKNIMEを,BI系はRapidMinerがいい気がする.
インストール†
Mac/UNIX 系へのインストールの概要.
Windows系は Installation Guide を参照.
- Java が 6.0 であることを確認
- Rapid-I から,RapidMiner > Download とたどって,Other Systems のダウンロードページへ
- 関連情報が欲しければメールを登録して,そうでなければ,下の方の download here をクリックしてダウンロード
- ダウンロードしたzipファイルを /usr/local/ や /Applications とかに展開し,rapidminer というディレクトリを作る
- その中の scripts に RapidMinerGUI があるので
- MAX_JAVA_MEMORY= をMBytes 単位で設定
- RapidMinerGUI に実行権限を与えて,パス上の適当な場所へ置いて実行すれば GUI環境が実行される.
さらに R との連携をする場合(Mac OS Xの場合)
チュートリアルまとめ†
しましまがVersion 5.0 のチュートリアルを実行したときのメモです.
最後にしましまと書いてある行は,特に個人的な視点で書いてます.
他の部分も私の理解に基づくまとめです.
- 最初に実行したら,自分のファイルを置くディレクトリを聞かれるので,適宜入力
- Helpメニューの RapidMiner Tutorial を選ぶとチュートリアルが始まる
1. 決定木
- 上の三角の実行ボタンを押すと,results workspace に変えるか聞いてくるので Y
- 結果が出てくるので,Tree タブで,Graph view を選ぶと決定木が見える
- viewメニューのperspective か上のバーのアイコンで design view に戻る
- Decision Tree が選ばれた状態で,右クリック
- Reprace Operator > Modeling でいろいろな分類器を使える
- データ集合がカテゴリ属性ばかりなので,SVM などを使うときはデータも変えること
2. 前処理込みの相関ルール
- Preprocessing は,多値変数を複数の2値変数で表す.
- 頻出パターンマイニングの FPGrowth で頻出パターンを見つけ,AssociationRuleGenerator で相関ルールを見つける
- 結果の相関ルールのカラムをクリックするとソートできる
3. アンサンブル学習
- 複数の学習器を組み合わせる学習
- Stacking をダブルクリックする,もしくは Stacking を選んでから,Process の中の左上の矢印を左・右の順にクリックすると,Stacking の中身のプロセスが表示される.
4. クラスタリングと次元削減
- KMeans でクラスタリングして,SVDReduction で次元削減
- 結果の ExampleSet (SVDReduction) で,Plotter=Scatter, x-Axis=d0, y-Axis=d1, ColorColumn=cluster か label とすると次元削減された散布図を見ることができる
5. SVM の例
- SVMを実行する
- 結果のKernel Model (JMySVMLearner) で,Plot View を選ぶ
- うまく分離できているかをみる
- Plotter=scatter か quantile, x-Axis=function values, y-Axis=alpha, Color Column=label
- Plotter=density, x-Axis=attribute1, y-Axis=attribute2, density color=function values, point color=support vector か alpha
6. 前処理:欠損値補完
- Retrieve を選んで,右クリックで break after を選択してブレークポイントを設定
- ブレークポイント時点での各クラスごとのデータが表示される
- Meta Data View ではMissings は欠損値の数
- Data View では,各データを閲覧可能.右上の View Filter で欠損値を除外して見たりもできる
- design workspace に戻って,view の expert mode を選ぶ
- Preprocessing (Replace Missing Values) で,attribute filter type で置換対象を,置換する値を default で指定する.
- Preprocessing のパラメータ(右の方) でattribute filter type=all, default=average とかすると欠損値の置換ができるっぽい
7. 人工ノイズの追加
- 人工ノイズをデータに加える前処理 (ニューラルネットの時代から正則化と同様の効果があると言われている -- しましま)
- 他にも,TFIDF,obfuscating, 時系列処理とかあるらしい
8. データベースの join
- 同じIDのデータを統合する DB の join の例
9. 交差確認
- 交差確認の各foldで訓練・テストを実行できる.実行のフローはツリー状になる.
- X-Val をダブルクリックする,もしくは X-Val を選んでから,Process の中の左上の矢印を左・右の順にクリックすると,X-Val の中身のプロセスが表示される.
- 左の訓練枠では SVM が適用されて,右ではテスト集合を分類して誤差指標を計算している.
10. ROC曲線
11. コストを考慮した学習 (分類しきい値を調整する)
- ThresholdFinder で,クラスのコストが非対称に設定されている
- チュートリアルには第1クラスの誤分類が,第2クラスの5倍と書かれているが,第2クラスが第1の2倍になってる気がする
- TestModelApplier が ThresholdFinder の前にあって,ここで保存されたモデルが,しきい値決定後にもう一度適用される
12. コストを考慮した学習 (誤分類コストの重み付き学習)
- X-Validation をダブルクリックすると,学習器はMetaCostになっている
- MetaCost は,各クラスを誤分類したときの誤差行列を設定し,他の学習器を呼び出す
13. 主成分分析
- Normalization は平均引いて,標準偏差で割る
- あとはPCAをする
- Example Set (Principal Components) で,Plot Viewにして,Plotter=Scatter, x-Axis=pc_1, y-Axis=pc_2, Color Column=label とかする
14. forward stepwise selection による特徴選択
- 追加すると最も予測精度が上がる特徴から順番に追加していく前向き特徴選択
- XValidation で予測精度を測る.中身の学習器は最近隣法
- ProcessLog は途中の誤差の保存
- 選択された特徴は,結果の AttributeWeights で分かる
- 誤差の変化は ProcessLog に,generation と performance で分かる
15. 遺伝アルゴリズムによる特徴選択
16. モデル選択
- 最初の層では,データにランダムな特徴量を足している.ランダムな特徴量が除外されれば成功
- 前処理での過学習を防ぐため,WrapperXValidation は,変換データの生成,変換データでのモデル学習,ホールドアウト集合での性能評価の3段階
- 第1段階は通常の FeatureSelection,第2段階はSVM,第3段階は2乗誤差で評価
- FeatureSelection の中身は交差確認での評価 FSXValidation
- さらにその中身は,SVMの学習と,モデルの評価
- 最後のFSMinMaxWrapper は,平均と最小値の線形結合で評価することで汎化誤差の改善をめざす
17. 特徴選択と特徴生成
- 特徴を組み合わせて新たな特徴を作る
- YAGGA (Yet Another Generating Genetic Algorithm) は遺伝的アルゴリズムによる特徴選択・特徴生成
- YAGGAのパラメータを変えると性能がどうかわるか?
- (apply_best_parameter というパラメータがYAGGA のexpertモードにあると書いてあるけど見つからない?log オペレータを足す説明が分からない.simple operator chain が見つからない? -- しましま)
18. 他のプロセスからの情報の導入
- 前の17で構築した特徴や,特徴の重みを AttributeConstructionsLoader や AttributeWeightLoader でロードする
- これらの構築した特徴や特徴の重みは AttributeConstructionsWriter や AttributeWeightWriter で前のチュートリアルで書き込んでおいたもの
19. 数値特徴からの特徴構築
- keep_all は,元の特徴も出力に含めるかどうかを決める
- Generation の中にある function description の式に従って特徴を生成する
20. 特徴の重み付け
- 遺伝的アルゴリズムで特徴を重み付け
- 最近隣法をラップした交差確認じゃない性能評価を目的関数にしている
- 実行中に一時停止してResultビューに切り替えてlogで途中経過を見れる.
- 一時停止ではなく,停止をやらないで,新たなプロセスを実行すると,バックグラウンドにプロセスが溜まってしまう.
21. χ2乗検定による特徴の重み付け
- 実行して ExampleSet の Plot Viewを選ぶ.
parallel, survey, RadViz, GridViz, histogram matrix, quartile matrix などの高次元可視化ツールを使ってみる.
- (重みが黄色いマークで表示される説明にはあるが,見つからない? -- しましま)
22. パラメータ設定
- C と dgeree のパラメータをいろいろ変えながら SVM を実行する
- Results の Log でplotter=Surface 3D, x-Axis=C, y-Axis=dgree, z-Axis=absolute などとすると性能が良くなるパラメータが分かる.
23. 前処理の最適化
- 前処理をするかどうかをOperatorEnabler で決定し,した結果と,しなかった結果を比較する
24. 分類を最適化するしきい値の探索
- GridParameterOptimization 中の Selection の weight パラメータがしきい値で,これをgrid検索で最適化
25. 性能評価指標の検定
- 性能指標の平均と標準偏差の有意性を検定
- SVMと線形回帰について,交差確認で性能指標のベクトルを獲得
- 対応のあるt検定とANOVAのいずれでも,SVMの性能が有意に良いというのが,Pairwise t-Test と Anova Test のところに出力されている.
26. 複雑な前処理
- トップレベルの三つの処理
- 一つ目は特定のフォーマットを作り出す定型処理
- 二つ目のValueIteratorはforeach のようなもので,指定した特徴の値を loop_value に入れて実行
- その属性値を持つ値を抽出するのに,ExampleFilter の中で %{loop_value} として参照されている
- DataMacroDefinition で定義したマクロ current_average は,AttributeConstruction の中で %{current_average} として参照されている
関連項目†
リンク集†
関連文献†