2023/05/07

Machine Learning:機械学習(2)

 週末の予想なんかしながらだと微妙に作業は捗りません😓 しかも、先日のクリーンインストール後の後遺症なのか競馬ソフトが全体的におかしいな~って思って色々調べたり。まあ、そもそも、自分に落ち度があるとは思うけど微妙な部分が判明。いやね、先日のトラブルの原因は特定出来てはいないものの、起動ドライブには余分なものは入れないのが鉄則。JV-Linkもしかりです。で、これ、当たり前に毎回入れ直したりしてもD:ドライブに入れるんですが、これには連動せずにどこにデータをセーブするかを指定する所があるのを思い出しました。単純にTARGETなんかでJV-Link設定とかあるので設定ダイアログ開くと「データの保存設定」としてデータ保存場所の指定が出来るんですが、そこがD:にインストールしてもデフォルトではC:トライブに。しかも、これが隠しになってるので分かり辛い😖 本日たまたまコースデータの読込で今まで何の問題も無かった東京芝2400mとかが表示されなくて、あれ?ってなってデバックしてると上手く表示されるコースでも画像データのPATHがC:ドライブなんで、ほんと、あれれ?ってなりますよね。で、まあ、クリーンインストール後にその辺りの設定しなおしを忘れてたのが原因でしたが...JV-Linkのアンインストールからの再インストールとこのセーブ先の指定やら、D:ドライブに既に存在しているフォルダを名前変更しておいて作り直しのとかね。権限の問題でってのも引っかかるので一応ね。

で、前置き長くなりましたが本題ね。アイビー先生を極限まで問いただしたらやっと教えてくれました😁 前回書込みした最後の

mlContext = new MLContext(seed: 0);

なんですが、'seed: 0'の部分理解してませんので一旦無しに😉 データリーダーからデータを読み込んでリストに格納すればいいって事で

List<ShinbaTime> data = new List<ShinbaTime>();

と宣言しておいて、いつものリーダーループで

ShinbaTime shinbaTime = new ShinbaTime();

shinbaTime.JouCD = rs.GetString("JOUCD");
shinbaTime.TrackCD = rs.GetByte("TRACKCD");
shinbaTime.Kyori = rs.GetInt16("KYORI");
shinbaTime.Tenko = rs.GetByte("TENKO");
shinbaTime.Baba = rs.GetByte("BABA");
shinbaTime.Souha = rs.GetFloat("SOUHA");
data.Add(shinbaTime);

てな感じで読み込んでセットして、リストからデータビューを作成するのに

IDataView dataView = mlContext.Data.LoadFromEnumerable(data);

ってします。で、トレーニングパイプラインを作成するんですが

var pipeline = mlContext.Transforms.CopyColumns(outputColumnName: "Label", inputColumnName: "Souha")
    .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "JouCDEncoded", inputColumnName: "JouCD"))
    .Append(mlContext.Transforms.Concatenate("Features", "JouCDEncoded", "TrackCD", "Kyori", "Tenko", "Baba"));

JouCDが文字列なのでこれを数値にするのにOneHotEncodingを使うらしい。で、要素全てを'Features'にまとめるってのも一気に指定(それがConcatenateね)。やれやれ、で、パイプラインでデータビューをトレーニングしてモデルを作成するのに

model = pipeline.Fit(dataView);

までで、今日はおしまい😉 まだまだ、大変です。

0 件のコメント:

コメントを投稿