概要
機械学習の最初の一歩に,irisデータセットを用いたアヤメの分類問題があります.このアヤメのデータセットは,入手のしやすさと扱いやすさで知られています.本記事では,irisデータセットのように初心者にも扱いやすい表形式のデータを使用し,3つ以上のクラスを識別する分類問題に焦点を当てたデータセットを紹介します.基本的にUCIの機械学習リポジトリから容易にダウンロード可能なデータセットです.
【基本方針】
- 表形式のデータ
- 特徴量が多くても10程度
- カテゴリーデータはできるだけ少ない.利用しなくても分析できる.
- 分類数は3〜9程度(2値分類は除く)
1. Land Mine (地雷の分類)
地雷の種類をセンサーの値で見分ける問題.
基本情報
- 地雷の種類 (5分類)
- データの数:338
- 特徴量の数: 3
ダウンロードするとxlsとcsvファイルが表示されます.csvファイル名はMine_Dataset.csvとなります.
data = pd.read_csv("../LandMine/Mine_Dataset.csv")
print(data.sample(5))
# V H S M
# 135 0.350453 0.727273 1.0 3
# 199 0.347432 0.545455 0.2 5
# 179 0.329305 0.727273 1.0 4
# 319 0.320241 0.909091 0.0 5
# 59 0.655588 0.545455 0.6 2
特徴量の簡単な紹介
- V:センサーの出力電圧
- H:センサーから地面までの距離(高さ)
- S:土壌のタイプ6種類を0から1に変換したもの
- M:地雷のタイプ5種類(分類するもの)
各クラスの要素数
class 1: 71
class 2: 70
class 3: 66
class 4: 66
class 5: 65
2. Abalone (アワビの年齢分類)
アワビのリングを利用した年齢の分類.
基本情報
- データ数:4177
- 特徴量の数: 8
- カテゴリーデータ:1
- 分類数:リングを3種類にまとめる
ダウンロードされたファイルを展開すると,abalone.dataやabalone.namesなどが表示されます.
- abalone.data:データ本体のcsvファイル
- abalone.names:データの説明のファイル
import pandas as pd
col = ["Sex", "Length","Diameter","Height","Whole weight","Shucked weight","Viscera weight","Shell weight","Rings"]
data = pd.read_csv("./abalone/abalone.data", names=col)
print(data.head())
# Sex Length Diameter Height Whole weight Shucked weight Viscera weight Shell weight Rings
# 0 M 0.455 0.365 0.095 0.5140 0.2245 0.1010 0.150 15
# 1 M 0.350 0.265 0.090 0.2255 0.0995 0.0485 0.070 7
# 2 F 0.530 0.420 0.135 0.6770 0.2565 0.1415 0.210 9
# 3 M 0.440 0.365 0.125 0.5160 0.2155 0.1140 0.155 10
# 4 I 0.330 0.255 0.080 0.2050 0.0895 0.0395 0.055 7
特徴量の簡単な紹介
- Sex: 性別.M,F,I(幼児)
- Length:全長
- Diameter:直径
- Height:高さ
- Whole weight:全重量
- Shucked weight:殻付き重量
- Viscera weight:内臓重量
- Shell Weight:殻重量
- Rings:リングの値 1〜29まで(分類の対象)
abalone.namesでは,Rings(年齢)を3種類のクラスに分けて紹介しています1.
3分類の例
- class 1:Rings 1〜8.1407個
- class 2:Rings 9〜10.1323個
- class 3:Rings 11〜29.1447個
3. Palmer Penguins (ペンギンの分類)
ペンギンの種類に関するデータセット.seabornのload_dataset()を利用することでpythonでも簡単に利用できます.
基本情報
- ペンギンの種類:3種類
- データの数:344
- 特徴量の数: 6
- カテゴリーデータ:2
seabornを利用してダウンロードされるファイル名は,penguins.csvとなり,sns.get_data_home()でダウンロードされたcsvファイルの保存先が表示されます.データセットの中にNaNがいくつかあります.
import seaborn as sns
data = sns.load_dataset("penguins")
print(data.head())
# species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
# 0 Adelie Torgersen 39.1 18.7 181.0 3750.0 Male
# 1 Adelie Torgersen 39.5 17.4 186.0 3800.0 Female
# 2 Adelie Torgersen 40.3 18.0 195.0 3250.0 Female
# 3 Adelie Torgersen NaN NaN NaN NaN NaN
# 4 Adelie Torgersen 36.7 19.3 193.0 3450.0 Female
特徴量の簡単な紹介
- species: ペンギンの種類 3種類
- island: 生息場所
- bill_length: くちばしの長さ
- bill_depth: くちばしの奥行き
- flipper_length: ヒレの長さ
- body_mass: 体重
- sex: 性別
- 細かい内容は,公式のページにイラスト付きで紹介されています.
NaNの情報を削除していない状態での分類数の内訳
- Adelie :152
- Gentoo :124
- Chinstrap :68
4. Wine (ワイン品種分類)
イタリアの同じ地域で栽培された異なる3品種の分類
基本情報
- ワインの品種クラス分類 (3種類)
- データの数:178
- 特徴量の数: 13
3種類のワインそれぞれに含まれる13の成分の量を特徴量としています.ダウンロードされるファイルは,wine.data,wine.namesなどとなります.データのファイルには列名が記載されていないので,列の呼称を付してデータを表示してみます.
- wine.names:データの詳細が記述されているファイル
- wine.data:データ本体.csvファイル
col = ["class","Alcohol","Malic acid","Ash","Alcalinity of ash","Magnesium","Total phenols","Flavanoids","Nonflavanoid phenols","Proanthocyanins","Color intensity","Hue", "OD diluted wines", "Proline" ]
data = pd.read_csv("./wine/wine.data", names=col)
print(data.sample(5))
# class Alcohol Malic acid Ash Alcalinity of ash Magnesium Total phenols Flavanoids Nonflavanoid phenols Proanthocyanins Color intensity Hue OD diluted wines Proline
# 4 1 13.24 2.59 2.87 21.0 118 2.80 2.69 0.39 1.82 4.32 1.04 2.93 735
# 59 2 12.37 0.94 1.36 10.6 88 1.98 0.57 0.28 0.42 1.95 1.05 1.82 520
# 144 3 12.25 3.88 2.20 18.5 112 1.38 0.78 0.29 1.14 8.21 0.65 2.00 855
# 141 3 13.36 2.56 2.35 20.0 89 1.40 0.50 0.37 0.64 5.60 0.70 2.47 780
# 119 2 12.00 3.43 2.00 19.0 87 2.00 1.64 0.37 1.87 1.28 0.93 3.05 564
特徴量の簡単な紹介
- class:品種
- Alcohol:アルコール
- Malic acid:リンゴ酸
- Ash:灰分
- Alcalinity of ash:灰分アルカリ度
- Magnesium:マグネシウム
- Total phenols:総フェノール
- Flavanoids:フラバノイド
- Nonflavanoid phenols:非フラバノイドフェノール
- Proanthocyanins:プロアントシアニン
- Color intensity:色の濃さ
- Hue:色相
- OD280/OD315 of diluted wines:希釈したワインのOD280/OD315
- Proline:プロリン
品種の内訳
- class 1 :59
- class 2 :71
- class 3 :48
5. Wine Quality (ワイン品質分類)
ワイン品種分類と似ていますが異なるデータセットです.ワインの品質に焦点を当てたもので赤ワインと白ワインの2種類用意されています.
基本情報
- 分類クラスごとの要素数が大きく異なる不均衡なデータセット
- ダウンロードされるデータファイルは,winequality-red.csv,winequality-white.csv,winequality.namesなどとなります.
5.1 赤ワイン
- データの数:1600
- 特徴量の数: 11
- 赤:品質6種類
- 品質は0から10の11段階用意されていますが,実際は3〜8の値(6種類)に収まっています.
- winequality-red.csv:データのファイル.区切り記号がセミコロン「 ; 」なので,pandasで読み込むときに,
sep=";"
を利用します.
data = pd.read_csv("./wine_quality/winequality-red.csv", sep=";")
print(data.head())
# fixed acidity volatile acidity citric acid residual sugar chlorides free sulfur dioxide total sulfur dioxide density pH sulphates alcohol quality
# 0 7.4 0.70 0.00 1.9 0.076 11.0 34.0 0.9978 3.51 0.56 9.4 5
# 1 7.8 0.88 0.00 2.6 0.098 25.0 67.0 0.9968 3.20 0.68 9.8 5
# 2 7.8 0.76 0.04 2.3 0.092 15.0 54.0 0.9970 3.26 0.65 9.8 5
# 3 11.2 0.28 0.56 1.9 0.075 17.0 60.0 0.9980 3.16 0.58 9.8 6
# 4 7.4 0.70 0.00 1.9 0.076 11.0 34.0 0.9978 3.51 0.56 9.4 5
特徴量の簡単な紹介
- fixed acidity:固定酸度
- volatileacidity:揮発性酸度
- citricacid:クエン酸
- residualsugar:残留糖分
- chlorides:塩化物
- freesulfurdioxide:遊離二酸化硫黄
- totalsulfurdioxide:全二酸化硫黄
- density:濃度
- pH:pH
- sulphates:硫酸塩
- alcohol:アルコール
- quality(scorebetween0and10):品質(0~10点.分類の対象)
品質ごとのデータ数
- 品質3 :10
- 品質4 :53
- 品質5 :681
- 品質6 :638
- 品質7 :199
- 品質8 :18
圧倒的に品質5と品質6が多い!
5.2 白ワイン
- データの数:4899
- 特徴量の数: 11
- 白:品質7種類
- 品質は0から10の11段階ですが,3〜9の値(7種類)に収まっています.
- winequality-white.csv:データファイル.区切り記号がセミコロン「 ; 」.
data = pd.read_csv("./wine_quality/winequality-white.csv", sep=";")
print(data.head())
# fixed acidity volatile acidity citric acid residual sugar chlorides free sulfur dioxide total sulfur dioxide density pH sulphates alcohol quality
# 0 7.0 0.27 0.36 20.7 0.045 45.0 170.0 1.0010 3.00 0.45 8.8 6
# 1 6.3 0.30 0.34 1.6 0.049 14.0 132.0 0.9940 3.30 0.49 9.5 6
# 2 8.1 0.28 0.40 6.9 0.050 30.0 97.0 0.9951 3.26 0.44 10.1 6
# 3 7.2 0.23 0.32 8.5 0.058 47.0 186.0 0.9956 3.19 0.40 9.9 6
# 4 7.2 0.23 0.32 8.5 0.058 47.0 186.0 0.9956 3.19 0.40 9.9 6
品質ごとのデータ数
- 品質3 :20
- 品質4 :163
- 品質5 :1457
- 品質6 :2198
- 品質7 :880
- 品質8 :175
- 品質9 :5
白ワインも圧倒的に品質5と品質6が多い!
6. Glass Identification(ガラスの分類)
ガラスの用途で分類したデータセット.フロートガラス(透明ガラス)とノン・フロートガラスによる2分類や窓ガラス,車のガラス,それ以外の3分類などいくつかのクラスに分けて利用することもできます.
基本情報
- データ数: 214
- ガラスの種類の分類(6種類)
- 特徴量の数: 9
col = ["ID","RI","Na","Mg","Al","Si","K","Ca","Ba","Fe","class"]
data = pd.read_csv("../GlassIdentification/glass.data", names=col)
print(data.head())
# ID RI Na Mg Al Si K Ca Ba Fe class
# 0 1 1.52101 13.64 4.49 1.10 71.78 0.06 8.75 0.0 0.0 1
# 1 2 1.51761 13.89 3.60 1.36 72.73 0.48 7.83 0.0 0.0 1
# 2 3 1.51618 13.53 3.55 1.54 72.99 0.39 7.78 0.0 0.0 1
# 3 4 1.51766 13.21 3.69 1.29 72.61 0.57 8.22 0.0 0.0 1
# 4 5 1.51742 13.27 3.62 1.24 73.08 0.55 8.07 0.0 0.0 1
特徴量の簡単な紹介
1 . ID:ID番号
2 . RI:屈折率
3 . Na:ナトリウム
4 . Mg:マグネシウム
5 . Al:アルミニウム
6 . Si:ケイ素
7 . K:カリウム
8 . Ca:カルシウム
9 . Ba:バリウム
10 . Fe:鉄
11 . class:クラス
ガラスの種類
class 1: 70
class 2: 76
class 3: 17
class 5: 13
class 6: 9
class 7: 29
このデータセットにはclass 4に該当するデータが存在しないようです.
7. Seeds (小麦の種の分類)
3つの異なる小麦品種の穀粒の幾何学的特性の測定したデータセット.
基本情報
- 分類数:3
- データ数:210 (70x3)
- 特徴量の数:7
- seeds_dataset.txt:データファイル.空白「 」が区切り記号なので
sep="\s+"
を利用します.
col = ["Area","Perimeter","Compactness","Length","Width","Aym_coeff","groove","class"]
data = pd.read_csv("../Seeds/seeds_dataset.txt", sep="\s+", names=col)
print(data.sample(5))
# Area Perimeter Compactness Length Width Aym_coeff groove class
# 145 11.21 13.13 0.8167 5.279 2.687 6.169 5.275 3
# 94 18.36 16.52 0.8452 6.666 3.485 4.933 6.448 2
# 107 17.63 15.86 0.8800 6.033 3.573 3.747 5.929 2
# 204 12.37 13.47 0.8567 5.204 2.960 3.919 5.001 3
# 57 14.92 14.43 0.9006 5.384 3.412 1.142 5.088 1
特徴量の簡単な紹介
- area :面積A
- perimeter :外周P
- compactness:コンパクト度 $C = (4\pi A)/P^2$
- length :カーネルの長さ
- width :カーネルの幅
- asy_coeff :非対称係数
- groove :カーネルの溝の長さ
- class:クラス(品種)
クラスの内訳
class 1:70
class 2:70
class 3:70
8. Ecoli (Protein Localization Sites Dataset)
タンパク質の局在サイトデータセット.タンパク質が細胞内や細胞間でのどの場所に位置しているのかを示したデータらしい2.クラスごとの要素数にかなりの偏りがあります.
基本情報
- データ数:336
- 特徴量の数:8
- カテゴリーデータ:1
- ecoli.data: データファイル.区切り記号が「 」.pandasで読み込むときに,
sep="\s+"
を利用します.
col = ["SequenceName","mcg","gvh","lip","chg","aac","alm1","alm2","class"]
data = pd.read_csv("../Ecoli/ecoli.data", sep="\s+", names=col)
print(data.head())
# SequenceName mcg gvh lip chg aac alm1 alm2 class
#0 AAT_ECOLI 0.49 0.29 0.48 0.5 0.56 0.24 0.35 cp
#1 ACEA_ECOLI 0.07 0.40 0.48 0.5 0.54 0.35 0.44 cp
#2 ACEK_ECOLI 0.56 0.40 0.48 0.5 0.49 0.37 0.46 cp
#3 ACKA_ECOLI 0.59 0.49 0.48 0.5 0.52 0.45 0.36 cp
#4 ADI_ECOLI 0.23 0.32 0.48 0.5 0.55 0.25 0.35 cp
特徴量の簡単な紹介
- SequenceName:配列名 SWISS-PROTデータベース名称
- mcg: McGeochのシグナル配列認識法
- gvh:von Heijneのシグナル配列認識法
- lip:von HeijneのシグナルペプチダーゼIIのコンセンサス配列スコア
- chg: 予測されるリポタンパク質のN末端の電荷の有無
- aac: 外膜タンパク質とペリプラズムタンパク質のアミノ酸含量の判別分析のスコア
- alm1: ALOM膜領域予測プログラムのスコア
- alm2:配列から切断可能なシグナル領域を除いた後のALOMプログラムのスコア
- class:クラス(分類対象)
クラスの内訳
cp: 143
im: 77
pp: 52
imU: 35
om: 20
omL: 5
imS: 2
imL: 2
9. Thyrioid Disease
甲状腺ホルモンに関するデータセット.甲状腺ホルモンの分泌量によって3種類に分類しています3.
基本情報
- データ数:215
- 特徴量の数: 5
- 分類数:3
- ファイルをダウンロードすると,たくさんのファイルが表示されます.今回紹介するのは次の2種類となります.
- new-thyroid.data
- new-thyrioid.names
col = ["class","T3","thyroxin","triiodothyronine","TSH","AD_TSH"]
data = pd.read_csv("../ThyrioidDisease/new-thyroid.data", names=col)
print(data.head())
# class T3 thyroxin triiodothyronine TSH AD_TSH
# 0 1 107 10.1 2.2 0.9 2.7
# 1 1 113 9.9 3.1 2.0 5.9
# 2 1 127 12.9 2.4 1.4 0.6
# 3 1 109 5.3 1.6 1.4 1.5
# 4 1 105 7.3 1.5 1.5 -0.1
特徴の簡単な紹介
- class :クラス(3種類)
- T3 :T3-レジン取り込み試験
- thyroxin :同位体置換法で測定した血清総サイロキシン
- triiodothyronine :ラジオイムノ法で測定した血清トリヨードサイロニン総量
- TSH :基礎甲状腺刺激ホルモン(TSH)
- AD_TSH :200マイクログラムのサイロトロピン放出ホルモンを注射した後のTSH値の基礎値に対する最大絶対差
クラスの内訳
class 1(正常): 150
class 2(過多): 35
class 3(不足): 30