ランダムフォレスト(まずは決定木)

会社で次やってみようとなったのが、ランダムフォレストを用いた戦略の検証なので、その勉強。

参考サイト

【機械学習】決定木をscikit-learnと数学の両方から理解する - Qiita

【機械学習】ランダムフォレストを理解する - Qiita

コード

前回からちょろちょろ手を付けているkaggleのtitaincのデータで実装してみる

今回はとりあえず決定木。

test_path = '/kaggle/input/titanic/test.csv'
train_path = '/kaggle/input/titanic/train.csv'
sub_path = '/kaggle/input/titanic/gender_submission.csv'

train_ = pd.read_csv(train_path)
test_ = pd.read_csv(test_path)
gender_submission = pd.read_csv(sub_path)

#  merge
data = pd.concat([train_, test_])

#  特徴量エンジニアリング
# sex
data['Sex'].replace(['male','female'], [0, 1], inplace=True)

# Embarked

data['Embarked'].fillna(('S'), inplace=True)
data['Embarked'] = data['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2} ).astype(int)

# Fare
data['Fare'].fillna(np.mean(data['Fare']), inplace=True)

# Age
# age_avg = data['Age'].mean()
# age_std = data['Age'].std()
# data['Age'].fillna(np.random.randint(age_avg - age_std, age_avg + age_std), inplace=True)

data['Age'].fillna(np.mean(data['Age']), inplace=True)

# delete columns
delete_columns = ['Name', 'PassengerId', 'SibSp', 'Parch', 'Ticket', 'Cabin']
data.drop(delete_columns, axis=1, inplace=True)

#  ここから決定木する準備
train = data[:len(train_)]
test = data[len(train_):]

y_train = train['Survived']
X_train = train.drop('Survived', axis = 1)
X_test = test.drop('Survived', axis = 1)

#  こんなところでimportしているのもご愛敬
from sklearn.tree import DecisionTreeClassifier, export_graphviz
# import graphviz
# import pydotplus
# from IPython.display import Image
# from sklearn.externals.six import StringIO

clf = DecisionTreeClassifier()
clf = clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)

#  提出
sub = gender_submission
sub['Survived'] = list(map(int, y_pred))
sub.to_csv('submission.csv', index = False)

スコアは0.75358