機械学習 しきい値の発見

まずif構文で判定するプログラムを作る

データが少ない時のしきい値を見つける

import pandas as pd
df = pd.read_csv('./input/data.csv')
df.head()

先頭5行の表示

def should_re_exam(weight):
    """ 再検査対象の人はTrue """
    if weight > 90:
        return True
    else:
        return False
for row in df.itertuples():
    print(should_re_exam(row.weight), row.y)

df.itertuplesでDataframeのループができます
各行rowから、row.weightのように値を取り出しています。
forのみの構文だと、一つ、一つ、rowと関係なくバラバラに取り出すことになる。
各行の「weightからの判定結果」と「yの値」が一致していることを確認します

ヒストグラムを作成してしきい値を見つける

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("./input/data3.csv")
len(df)

100

df.head(3)
df.describe()
plt.hist(df[df["y"] == 0]["x"],
         bins=24, range=(0, 6), color="blue")
plt.hist(df[df["y"] == 1]["x"],
         bins=24, range=(0, 6), color="red");

yが0のデータと yが1のデータの2回に分けて描画しています
plt.hist(…) でヒストグラムを描画します
横軸は列xの階級で、縦軸は度数(階級に属する個数)です
df[df[‘y’] == 0][‘x’] で、「y列が 0の行の、x列の値」を取得しています

range=(0, 6) でビンの最小値、最大値を指定しています
bins=24 で階級(ビン)の数を指定しています(0.25刻みで24階級)
color=’blue’ で描画するグラフの色を指定しています

def is_one(x):
    if x > 3:
        return True
    else:
        return False

x が3以上の値か確認し、1(True)か0(False)かを判定するis_one関数を定義

answers = []
for row in df.itertuples():
    answer = is_one(row.x)
    answers.append(answer)

df の各行のx列の値を is_one関数で判定し、answersに追加

(answers == df['y']).sum() / len(answers)

1.0

データのy列の値(df[‘y’])とanswersを比較して、正答率を計算
(answers == df[‘y’]).sum()で、is_oneの判定結果が正しかった数を取得しています
その値を全体の数 len(answers) で割ることで、正答率を計算しています
正答率は1.0なので全て正解しています

条件が二つの場合

def is_man(height,weight):
    if height> 163 and weight <60:
        return True
    else:
        return False
answers = []
for row in df.itertuples():
    answer = is_man(row.height,row.weight)
    answers.append(answer)

このようにrow.heightと名前を付ける

コメント

タイトルとURLをコピーしました