学習データ中の連続値の離散化

機械学習で分類器を作るのに、連続値の離散化が必要になったのでメモ。離散化1つにたくさんあるらしい。大体はRを使えばできそう。

今やりたい離散化が書いてある論文

Fayyad, Usama M.; Irani, Keki B. (1993) "Multi-Interval Discretization of Continuous-Valued Attributes for Classification Learning"

http://ijcai.org/Past%20Proceedings/IJCAI-93-VOL2/PDF/022.pdf

  

各離散化手法のまとめ・概説

d.hatena.ne.jp

MDLPってやつらしい。

 

Rでのチュートリアル

d.hatena.ne.jp 

 

MDLPをRで動かしてみる。手でプログラム書いてRと一致したらOK。

LR2のスキンについてのメモ

この冬にBMSプレイヤー、LR2のプレイスキンの作り方を調べたりしたので記録。基本的にLR2のスキンに関することはRED.氏のスキン仕様書がカバーしている。

LR2beta3 スキンcsv仕様書 第八版

http://www.geocities.jp/red_without_right_stick/lr2skinhelp.html

 

巷のスキン仕様解説に助けられたので自分なりに少し書きたい。たまに追記する予定。

 

目次

0.前置き
1.スキンの構成要素

 1.1 画像について

 1.2 csvファイル

 1.3 lr2skinファイル

 

0.前置き

スキンの配置場所は.\LR2beta3\LR2files\theme\

スキンを作るならここに新規フォルダ作成, いじるなら編集用にコピーを取っておくと安心。

スキン動作の基本的アイデア

スキン用の画像を用意→使う部分を切り出す→LR2の画面上に位置を指定して貼り付ける

のみ。貼り付ける際にオプションを指定することで拡縮して表示したりアニメーションさせたりできる。

 

1.スキンの構成要素

スキンは画像と2つのテキストファイル、合わせて3種類のファイル群からなる。

・画像ファイル
・.csvファイル
・.lr2skinファイル

画像ファイルはpng形式を推奨。

csvファイルとlr2skinファイルをざっくり言うと

csvファイル…画像パーツの配置を書いたもの

・lr2skinファイル…スキン全体を管理するもの

lr2skinファイルはスキンの動作定義というよりは大元の管理といった感じなのであまり考える必要がない。lr2skinファイルでスキンを認識させ、csvで動かすという認識でいいと思う。csv,lr2skin両方ないとスキンは動かない。スキン分岐命令はlr2skinでもcsvでもできる。

 

1.1 画像について

png形式を推奨。tga形式は扱ったことがないので他で。

スキンをいじる/作る過程で、透過が扱える画像編集アプリケーションが必要になる。ペイントしかないならGIMPをインストールするとはかどる。

www.forest.impress.co.jp

 

既存のスキンを見るとパーツがくっついた1枚の大きな画像がよくあるけれど、アニメーションしないパーツなら1パーツ1枚でも問題ない。後述のcsvファイルやlr2skinファイルでは各画像毎にLR2本体があるフォルダからの相対パスを記述していくので画像のファイル配置は自由。noteフォルダにノーツ用画像, judgeフォルダに判定用画像など。

 

1.2 csvファイル

"LR2の画面上に画像を貼り付ける"部分にあたる。

csvファイルはテキストファイルではあるけれども、Excelのように表形式で表示できる点が異なる。csvの編集はExcel, テキストエディタでは辛いのでCassava Editor等のフリーのcsvエディタを推奨。

Cassava Editor - あすかぜ・ねっと

csvでは主に画像の"切り出し"と"貼り付け"の2つをセットで書いていく。ここは上に挙げたRED.氏のLR2スキン仕様書の#SRC_IMAGE,#DST_IMAGEの欄が詳しい。

また、csvには、スキンで使う画像のファイルパスを全て書いておく必要がある。書いた順に0番,1番,2番…と番号が割り振られ、切り出す/貼り付ける際にはその番号で指定する。結局、画像をLR2で表示するために必要な命令は以下の3つ。

#IMAGE 画像のファイルパス記述

#SRC_IMAGE 画像の切り出し

#DST_IMAGE 画像の貼り付け

 

#IMAGEは宣言のようなものなので1度書けばOK。#SRC_IMAGEと#DST_IMAGEは画像パーツを1つ貼り付ける毎に1セット書く。LR2で使うcsvファイルの細かなフォーマットはRED.氏の仕様書参照。

 

1.3 lr2skinファイル

lr2skinファイルはスキン全体をまとめるテキストファイル。lr2skinファイルがないとLR2に認識してもらえない。lr2skinファイルで記述する内容はおおまかに以下の通り。

・スキン名(スキンプレビューで表示されるスキン名)

・スキンの種別(SP/DP/選曲/決定……)

・スキンカスタマイズの項目

 スキンプレビューの画面でカスタマイズできる項目はlr2skinに記述することで表示される。連動して読み込む画像ファイルが変わることでノーツの色やフレームの種類などが変わる。まったくなくても良い。

 

音が遅延する

起きたこと:LR2beta3でBMSを遊ぼうと思ったら発音遅延が起きた

原因:サウンドのハードウェアアクセラレータを使用していなかった

対処:ハードウェアアクセラレータを使用するように設定した

結果:直った

 

以下、経緯

 家にあるノートパソコン(WindowsXP XP3)でBMSをやろうと思ったらキー音が秒単位で遅れてしまってプレーにならなかった。再起動をしてもLR2のバッファ数を小さくしても直らなかった。

結局、"ハードウェアアクセラレータを使用する"のチェックが外れていた。本来は使用する状態になっているので、昔いじった時に変えてしまったのかもしれない。コントロールパネルのサウンドの項目から設定できる。

テザリングで繋がらない

起きたこと:スマートフォン(ソフトバンク/303SH/android)のテザリング機能でインターネットに接続出来なかった

原因:PC側の設定でIPアドレスを固定していたため

対処:IPアドレスを自動取得する設定に切り替える

結果:直った

 最近、久しぶりにオンラインゲーム(マビノギ)をインストールした。7年ぶりのマビノギ、やってみるとこれがひどいラグでゲームにならない。度重なるバージョンアップで必要な環境が上がってしまったのかもしれない。昔は遊べていたのに。原因が自宅の劣悪な無線LAN環境(ping値が200を超え、30分に1回は切れる)なのは明らかだったので、使っていなかったスマートフォンテザリング機能を試してみることにした(スマートフォンで使っている4G回線は家の数十倍速い上に安定している)。

 いざやってみると接続の表示は出るものの、ゲームが始まらないどころかWebページの閲覧すら出来ない。おかしいと思いワイヤレスネットワーク接続のプロパティを見てみると、送信パケットに対して受信パケットがほぼ0だったので原因はネットワークの設定にありそうだった。特に変更するところが見当たらなかったのでGoogle検索に頼る。


 まず「テザリング 繋がらない」で検索するとiPhoneテザリング機能に関するQ&Aが大量に出てきた。どうやら制限付きアクセスと表示されてしまい繋がらないとのことらしい。しかし今回の症状には当てはまらなかった。PC側ではあたかも完全に接続されているように見えている。いわゆる"再セットアップ(設定のやり直し、再起動)"も試したけれど、ダメだった。

次にキャリアやスマートフォンのOSによるものかと思い、検索ワードを変えて更に調べる。

ソフトバンク テザリング できない」

android テザリング 接続できない」

同じような症状の方がいたので見てみると、回答に「IPアドレスが重複していませんか?」の一言。読んでなんとなく思い当たる節があった。ワイヤレスネットワーク接続のプロパティからインターネットプロトコル(TCP/IP)のプロパティを開いてみると、案の定IPアドレスが固定されていた。昔、「接続が不安定なのはIPアドレスが自動割り当てになっているせいじゃないか」なんて見当外れなことを考えて固定したのをすっかり忘れていた。IPアドレスの割り当ての仕組みとかは正直さっぱりなので変なことは言えないけれど、以前ルーター側で自分でIPアドレスを決めて設定したのだからスマートフォン側でこの設定ができないならテザリングIPアドレスは固定できないんだろうと思った。

 ということでIPアドレスの固定をやめて、自動割り当てにする。詳しい設定のやり方は以下のリンクの手順2までが参考になる。このリンク先では"IPアドレスの固定"を行っているので手順3は逆に"IPアドレスを自動的に取得する"にしておく。

パソコンのIPアドレスを固定したい(Windows 7/Vista)


WindowsXPの場合

1."ネットワーク接続"を開く(コントロールパネルなどから)

2."ワイヤレスネットワーク接続"のアイコンを右クリックしてプロパティ(P)をクリック

3.[全般]タブの"この接続は次の項目を使用します"の項目の下の方にある、"インターネットプロトコル(TCP/IP)"をクリックしてプロパティ(R)をクリック

4.[全般]タブの"IPアドレスを自動的に取得する"をクリックしてOKをクリック

もしインターネットプロトコル(TCP/IP)のプロパティでIPアドレスが自動取得される設定になっていなかった場合は、この方法で直るかもしれない。たぶんレアケースなのであくまで参考程度に。

 結局、今回はこの設定一つで繋がるようになった。無事にゲームサーバーにも接続できてラグもほとんどない。自宅環境よりずっとずっと快適に安定してプレイできるようになった。見たところ通信量も少ないので常用することになりそう(要検証)。