verilog書く人

自称ASIC設計者です。どなたかkaggle一緒に出ましょう。

【機械学習】スタッキングのキホンを勉強したのでそのメモ

そもそもスタッキングとは

 機械学習において、単一の学習器をそのまま使うのではなく、複数の学習器を組み合わせることで、予測エラーを小さくする手法をアンサンブル学習といいます。

アンサンブル(混合学習手法の)には複数の学習器の平均や多数決を取るvoting、構成済の学習器の誤りを反映して次段の弱学習器を形成するboosting、そして初段の学習器の出力結果を次段の入力結果とするstacking(以下スタッキング)とよばれるものがあり、Kaggleなどのデータ分析コンペでは良く使われます。

今回はスタッキングについて勉強したので、それをまとめてみました。

おもにKaggle Ensembling Guide | MLWaveを参照しています。

 

続きを読む

Windows 7 32bitにXGBOOSTをインストール

 

環境:Windows 7 32bit

Visual Studio 2010 Express

Python 2.7

 

いろいろとショボい環境にてKaggle界のロトの剣ことXGboostを漸くインストールできましたのでメモ。


64bitの方がらくだと思います。

また、XGBOOSTはWindows 32bit環境では正式サポートはされていません。Linuxに移る、OSを64bitにする、といったより賢明な選択肢もあります。今ならWindows 10にすれば無料で64bitに移れます。その点をご理解の上で以下はお読みください。

続きを読む

PreTrainingChainをscikit-learnのGridSearchに対応しました

以前作ったChainerのラッパーであるPreTrainingChain

chainerで気軽にスケールできる事前学習器付きニューラルネット生成 - verilog書く人

をscikit-learnの学習器ライクに使えるようにしたのとGridSearchに対応しました。

 

続きを読む

SOINNで手書き数字MNISTをクラスタリングしてみた

最近ちょいちょいニュースで見かけるようになったSOINN株式会社の機械学習アルゴリズムSOINNを試しました。

 

コードはこちらのtrain_mnist.pyです

 

 

SOINNとはSelf-Organizing Incremental Neural Network(自己増殖型ニューラルネットワーク)の略で、クラスタリング(データ群の中から、近しいもののグルーピングを行う)などに使われる機械学習アルゴリズムです。

 

続きを読む

JavaのTreesetをPythonで

「できらあ!!」

「え!!同じデータ構造をPythonで!?」

 

というわけでJavaのTreesetに当たるデータ構造がPythonで欲しくなったので、自分で実装してみました。

 

treeset.pyをコピーして使ってください。

 

Treesetはsetのように、重複が存在しないデータ集合ですが、setと違い、初期時にデータがソートされます。また、新しい要素が追加されるたびに、二分木探索によって適切な位置に挿入されます。

使い方は例えば、こんな感じ。

from treeset import TreeSet

# 初期化時に重複要素は消える、またソートが行われる ts = TreeSet([3,7,2,7,1,3]) print(ts) >>> [1, 2, 3, 7]
# 4を加えると、3と7の間に挿入される ts.add(4) print(ts) >>> [1, 2, 3, 4, 7]

 

インデックスによる取得、要素を指定してリムーブもできます。

 

# 三番目の要素を取得
print(ts[2])
>>> 3
# 最後の要素を取得
print(ts[2])
>>> 3
# Treesetに7があれば消去
ts.remove(7) print(ts) >>> [1, 2, 3, 4] ts.pop(
2)
# インデックスをpop
print(ts) >>> [1, 2, 4]

 

中身はシンプルでbisectモジュールを使って、適宜、中身のデータをソートしているだけです。

 

from treeset import TreeSet

class TreeSet(object)

def __init__(self, elements):
self._treeset = []
for element in elements:
self.add(element)
    def add(self, element):
# 要素が既に存在しなければbisect.insertで適切な位置に挿入
if element in self._treeset: continue
self.add(element)
bisect.insort(self._treeset, element)

 

よかったらお試しください。

雑記chainerエンジョイ勢のためのトラブルシューティング

chainerで遊んでいてつまづいたところのメモ。

インストール編、動作速度編、ランタイムエラー編、動作するけど学習結果がうまくいかないよ編の四つです。

続きを読む