Kaggle Tutorial 1 - Introduce to ML


kaggle
python random stateについて

1.csvファイルを開く


csvファイルは、データを区切るテキスト型ファイルです.Excelで開くこともできますし、Excelファイルからcsvファイルに変更することもできます.
import pandas as pd
path = '...'
csv_data = pd.read_csv(path)
csv_data.describe()
上記の方法で読むことができます.
y = csv_data.Price
feature = [...,...]
X = csv_data[feature]
これによりtargetとfeatureを別々に格納できます.

2. decision tree


decision treeは、各問題でデータセットを分割することを意味する.深さが深いほど、データは細かくなります.
from sklearn.tree import DecisionTreeRegressor
tree_model = DecisionTreeRegressor(random_state=1)
tree_model.fit(X, y)
これによりモデルを宣言しfit(訓練)を行うことができる.
前にfeature、後ろにtargetを追加します.(targetは予測が必要な値)

3.MAEを用いて予測値と実績値の差異を求める


MAEはMean Average Errorの略語で、実際の値と予測値の平均値の違いを教えてくれます.
これはmodelvalidationを検査して、decision treeで計算して、leafdepthがどれだけ大きいかによって、MAEは異なって、それを利用して最も良いdepthを見つけることができます.
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_average_error as mae
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=0)
model = DecisionTreeRegressor()
model.fit(train_X, train_y)
predictions = model.predict(test_X)
print(mae(test_y, predictions))
上記はtrainデータで学習したモデルにテストデータを入れ,予測値の適合度を評価するコードである.

4. Overfitting, Underfitting

Overfittingtrain dataの訓練はあまりにも適切で、test data(new data)に対する予測値は多く間違っているが、Underfittingtrain dataの予測値はあまり適切ではなく、訓練が柔軟すぎて、train dataとtest dataの精度が低下した.
したがって、decision treeでは、depthが高いほどOverfittingが高くなり、Underfittingが低くなる.
次のコードは、depthを複数に分割し、最適なdepthを見つけます.
これは、DecisionTreeRegressormax_leaf_nodesによって調整される.
def get_mae(i, train_X, test_X, train_y, test_y):
    model = DecisionRegressor(max_leaf_nodes=i, random_state=1)
    model.fit(train_X, train_y)
    predictions = model.predict(test_X)
    mae_value = mae(test_y, predictions)
    return max_value

depth = [1, 5, 50, 500]
key_mae = {i: get_mae(i, train_X, test_X, train_y, test_y) for i in depth}
best_depth = min(key_mae, key=key_mae.get)
この方法でparameterを求めることができ、最適なdepthを訓練することができる.

5.best depthの使用


ランダム森林記述サイト
これには、次のような用途があります.
from sklearn.ensemble import RandomForestRegressor
残りは同じですが、modelにはRandom Forestはありません.この点に注意してほしい.