Calbee サッポロポテト バーベQあじ 燻製ベーコンあじ

独特な味がして,カモそばのような風味がします.
塩味とコンソメのような風味が中心で,辛すぎたり酸っぱすぎたりしないので,まろやかで美味しく頂けます.
特に酸味が強い安ワインのツマミに.

原材料名は,「小麦粉」,「でん粉」,「じゃがいも(遺伝子組換えでない)」,「上新粉」,「糖類(砂糖,ぶどう糖)」,「鶏肉」,「食塩」,「オニオンパウダー」,「チキンパウダー」,「香辛料」,「酵母エキスパウダー」,「しょうゆ(大豆を含む)」,「玉ねぎ」,「ピーマン」,「かぼちゃパウダー」,「ソテーオニオン」,「粉末しょうゆ」,「ソテーチキンペースト」,「チキンエキスパウダー」,「調味動物油脂」,「ビーフパウダー」,「ベーコンフレーク(乳をふくむ)」,「酵母エキス」,「デキストリン」,「調味料(アミノ酸等)」,「炭酸カルシウム」,「香料」,「着色料(カラメル,紅麹)」,「甘味料(甘草,ステビア,キシロース)」等で,エネルギーは65グラム当たり329kcal,ナトリウムの食塩相当量は1.1グラムだそうです.

原材料が,すごく盛りだくさんです...

Wekaをちゃんと使ってみる

かなり昔から知っていたのですが,Javaが好きでなかったので食わず嫌いしてました.
http://www.cs.waikato.ac.nz/ml/weka/index.html

Weka is a collection of machine learning algorithms for data mining tasks. The algorithms can either be applied directly to a dataset or called from your own Java code. Weka contains tools for data pre-processing, classification, regression, clustering, association rules, and visualization. It is also well-suited for developing new machine learning schemes.

Wekaはデータマイニングのための機械学習アルゴリズム集です.
アルゴリズム集はデータに直接適用もできますし,Javaプログラムから呼び出すこともできます.
Wekaにはデータのプリプロセス,クラス分類,回帰分析,クラスタリング,アソシエーションルール,可視化などのツールが含まれています.
もちろん新しい学習スキームの開発にも適しています.

そもそも独自のARFF形式というファイル形式でデータを与えるというのがアレだったのですが,真面目に仕様書を読むと
(特に高度なことを必要としなければ)むっちゃ簡単でした.ヘッダでデータの形などを定義しておいて,
その後にCSV形式みたくデータを並べるだけ.
というかCSVファイルを突っ込んでもそこそこ賢く変換してくれますし.


というわけで遊んでみようと思うのですが,テストデータを手作業で作るのはイヤなので,
カリフォルニア大学機械学習レポジトリからサンプルとしてデータ数の少ないものを
もらってきました.
まずはこちら.
UCI Machine Learning Repository: Lenses Data Set
データの中身はこんな感じです.

分類するクラスは3種類.

    • 3 Classes

1 : the patient should be fitted with hard contact lenses,
2 : the patient should be fitted with soft contact lenses,
3 : the patient should not be fitted with contact lenses.

1 : ハードコンタクトレンズをするべき患者
2 : ソフトコンタクトレンズをするべき患者
3 : コンタクトレンズをすべきではない患者

属性は以下のような感じ.

1. age of the patient: (1) young, (2) pre-presbyopic, (3) presbyopic
2. spectacle prescription: (1) myope, (2) hypermetrope
3. astigmatic: (1) no, (2) yes
4. tear production rate: (1) reduced, (2) normal

1. 患者の年齢層: 1=若い,2=老眼手前,3=老眼
2. メガネの種類: 1=近視,2=遠視
3: 乱視: 1=無し,2=有り
4: 涙量: 1=少なめ,2=普通

24人分のデータが並んでいます.
http://archive.ics.uci.edu/ml/machine-learning-databases/lenses/lenses.data

1 1 1 1 1 3
2 1 1 1 2 2
3 1 1 2 1 3
4 1 1 2 2 1
5 1 2 1 1 3
6 1 2 1 2 2
7 1 2 2 1 3
8 1 2 2 2 1
9 2 1 1 1 3
10 2 1 1 2 2
11 2 1 2 1 3
12 2 1 2 2 1
13 2 2 1 1 3
14 2 2 1 2 2
15 2 2 2 1 3
16 2 2 2 2 3
17 3 1 1 1 3
18 3 1 1 2 3
19 3 1 2 1 3
20 3 1 2 2 1
21 3 2 1 1 3
22 3 2 1 2 2
23 3 2 2 1 3
24 3 2 2 2 3

CSVに加工してみても良いのですが,ARFFに挑戦してみようと思います.

% 何のデータかの名前をつける
@RELATION lense

% 6つの属性を定義していく(ID+4属性+クラス)
% 数値データだと分かりにくいので(このデータの場合は単なるラベルなので),列挙型に変換
@ATTRIBUTE id numeric
@ATTRIBUTE age {young, pre-presbyopic, presbyopic}
@ATTRIBUTE spectacle {myope, hypermetrope}
@ATTRIBUTE astigmatic {no, yes}
@ATTRIBUTE tear {reduced, normal}
@ATTRIBUTE class {hard-contact, soft-contact, no-contact}

% データを並べる.ただし数値から列挙文字列に変換
@DATA
1, young, myope, no, reduced, no-contact
2, young, myope, no, normal, soft-contact
3, young, myope, yes, reduced, no-contact
4, young, myope, yes, normal, hard-contact
5, young, hypermetrope,no, reduced, no-contact
6, young, hypermetrope,no, normal, soft-contact
7, young, hypermetrope,yes, reduced, no-contact
8, young, hypermetrope,yes, normal, hard-contact
9, pre-presbyopic,myope,no, reduced, no-contact
10,pre-presbyopic,myope,no, normal, soft-contact
11,pre-presbyopic,myope,yes, reduced, no-contact
12,pre-presbyopic,myope,yes, normal, hard-contact
13,pre-presbyopic, hypermetrope,no, reduced, no-contact
14,pre-presbyopic, hypermetrope,no, normal, soft-contact
15,pre-presbyopic, hypermetrope,yes, reduced, no-contact
16,pre-presbyopic, hypermetrope,yes, normal, no-contact
17,presbyopic, myope,no, reduced, no-contact
18,presbyopic, myope,no, normal, no-contact
19,presbyopic, myope,yes, reduced, no-contact
20,presbyopic, myope,yes, normal, hard-contact
21,presbyopic, hypermetrope,no, reduced, no-contact
22,presbyopic, hypermetrope,no, normal, soft-contact
23,presbyopic, hypermetrope,yes, reduced, no-contact
24,presbyopic, hypermetrope,yes normal, no-contact

これをlense.arffで保存しておきます.

J4.8で決定木を作ってみます.

ツリーの様子を見ると,涙が少ないとコンタクトはダメ,それから涙量が普通でも,乱視もある遠視の人は
コンタクトがダメなようです.
年齢的なものは余り関係ない...?医学的なことは分からないので,とりあえずこういう結果に
なったということで.

NaiveBayesもやってみましたが,クロスバリデーションによると決定木の方が精度が良いようでした.

ここまで書いて,Javaなんだから日本語でもいける気がしてきました...そこでデータを徹底的に日本語化.

% 何のデータかの名前をつける
@RELATION レンズ

% 6つの属性を定義していく(ID+4属性+クラス)
% 数値データだと分かりにくいので(このデータの場合は単なるラベルなので),列挙型に変換
@ATTRIBUTE id numeric
@ATTRIBUTE 年齢 {若い, 老眼手前, 老眼}
@ATTRIBUTE メガネ {近視, 遠視}
@ATTRIBUTE 乱視 {無し, 有り}
@ATTRIBUTE 涙 {少なめ, 普通}
@ATTRIBUTE コンタクトクラス {ハードレンズ, ソフトレンズ, コンタクト無し}

% データを並べる.ただし数値から列挙文字列に変換
@DATA
1, 若い, 近視, 無し, 少なめ, コンタクト無し
2, 若い, 近視, 無し, 普通, ソフトレンズ
3, 若い, 近視, 有り, 少なめ, コンタクト無し
4, 若い, 近視, 有り, 普通, ハードレンズ
5, 若い, 遠視,無し, 少なめ, コンタクト無し
6, 若い, 遠視,無し, 普通, ソフトレンズ
7, 若い, 遠視,有り, 少なめ, コンタクト無し
8, 若い, 遠視,有り, 普通, ハードレンズ
9, 老眼手前,近視,無し, 少なめ, コンタクト無し
10,老眼手前,近視,無し, 普通, ソフトレンズ
11,老眼手前,近視,有り, 少なめ, コンタクト無し
12,老眼手前,近視,有り, 普通, ハードレンズ
13,老眼手前, 遠視,無し, 少なめ, コンタクト無し
14,老眼手前, 遠視,無し, 普通, ソフトレンズ
15,老眼手前, 遠視,有り, 少なめ, コンタクト無し
16,老眼手前, 遠視,有り, 普通, コンタクト無し
17,老眼, 近視,無し, 少なめ, コンタクト無し
18,老眼, 近視,無し, 普通, コンタクト無し
19,老眼, 近視,有り, 少なめ, コンタクト無し
20,老眼, 近視,有り, 普通, ハードレンズ
21,老眼, 遠視,無し, 少なめ, コンタクト無し
22,老眼, 遠視,無し, 普通, ソフトレンズ
23,老眼, 遠視,有り, 少なめ, コンタクト無し
24,老眼, 遠視,有り 普通, コンタクト無し

そして文字コードUTF-8にして保存.
注意!BOM無しにすること!

すると...分かりやすすぎる...