SIGNATEで、タイタニックの生存予測、アヤメの分類に続いて、天秤のバランス分類に参加しました。
天秤のバランス分類
天秤のバランス分類(練習問題)に参加しました。
このコンペでは、重量と距離の情報から天秤の状態を分類するモデルを作成します。
まず、データタブから学習用データ(train.tsv)、評価用データ(test.tsv)、応募用サンプルファイル(sample_submit.csv)をダウンロードしました。
解析環境にGoogle Colaboratoryを用いるため、ダウンロードしたデータはGoogle Driveに移動します。
私は、Google Driveにbalanceディレクトリを作成し、balanceディレクトリにtrain.tsv、test.tsv、sample_submit.csvを移動しました。
そして、Google Colaboratoryを起動し、コードを書いていきます。
ライブラリのインポート
# NumPy、pandas、seaborn、matplotlib.pyplotのインポート
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
データの読み込み
# データの読み込み
train = pd.read_csv("/content/drive/MyDrive/balance/train.tsv", sep='\t')
test = pd.read_csv("/content/drive/MyDrive/balance/test.tsv", sep='\t')
sample_submit = pd.read_csv("/content/drive/MyDrive/balance/sample_submit.csv", header=None)
train.head()
test.head()
sample_submit.head()
データの可視化
classの可視化
sns.countplot(x="class", data=train)
plt.show()
classは天秤のバランスで、0が左、1が平衡、2が右です。
0と2が多く、1が少ないことがわかります。
class、left_weight、left_distance、right_weight、right_distanceの可視化
sns.pairplot(train[["class", "left_weight", "left_distance", "right_weight", "right_distance"]], hue="class", palette="tab10")
plt.show()
0はleft_weight、left_distanceが大きく、2はright_weight、right_distanceが大きいことがわかります。
classとleft_weightの可視化
sns.countplot(x="left_weight", hue="class", data=train)
plt.show()
classとleft_distanceの可視化
sns.countplot(x="left_distance", hue="class", data=train)
plt.show()
classとright_weightの可視化
sns.countplot(x="right_weight", hue="class", data=train)
plt.show()
classとright_distanceの可視化
sns.countplot(x="right_distance", hue="class", data=train)
plt.show()
データ前処理
trainとtestの連結
data = pd.concat([train, test], sort=False)
データの確認
data.head()
print(len(train), len(test), len(data))
312 313 625
欠損値の確認
data.isnull().sum()
不要列の削除
delete_columns = ['Unnamed: 0']
data.drop(delete_columns, axis=1, inplace=True)
data.head()
学習データとテストデータの抽出
train = data[:len(train)]
test = data[len(train):]
y_train = train['class']
X_train = train.drop('class', axis = 1)
X_test = test.drop('class', axis = 1)
X_train.head()
y_train.head()
機械学習
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
clf.score(X_train, y_train)
0.8782051282051282
y_pred[:10]
array([0., 2., 2., 0., 2., 2., 0., 0., 0., 2.])
データの出力
sub = sample_submit
sub[1] = list(map(int, y_pred))
sub.to_csv("/content/drive/MyDrive/balance/submit.csv", index=False, header=False)
submit.csvが出力されたことを確認したら、コンペのサイトに移動します。
https://signate.jp/competitions/130
右下の投稿をクリックし、ファイルを選択からsubmit.csvをアップロードします。
これにより、結果を提出することができました。
暫定評価は0.8881789でした。
このコンペは、アヤメの分類と同じく取り組みやすいコンペなので、初心者におすすめです。
引き続き、テーブルコンペの練習問題に取り組んでいきます。