0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SIGNATEで天秤のバランス分類に参加した

Posted at

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()

スクリーンショット 2023-12-22 0.20.32.png

test.head()

スクリーンショット 2023-12-22 0.20.49.png

sample_submit.head()

スクリーンショット 2023-12-22 0.20.59.png

データの可視化

classの可視化

sns.countplot(x="class", data=train)
plt.show()

Unknown-4.png

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()

Unknown-5.png

0はleft_weight、left_distanceが大きく、2はright_weight、right_distanceが大きいことがわかります。

classとleft_weightの可視化

sns.countplot(x="left_weight", hue="class", data=train)
plt.show()

Unknown-6.png

classとleft_distanceの可視化

sns.countplot(x="left_distance", hue="class", data=train)
plt.show()

Unknown-7.png

classとright_weightの可視化

sns.countplot(x="right_weight", hue="class", data=train)
plt.show()

Unknown-4.png

classとright_distanceの可視化

sns.countplot(x="right_distance", hue="class", data=train)
plt.show()

Unknown-5.png

データ前処理

trainとtestの連結

data = pd.concat([train, test], sort=False)

データの確認

data.head()

スクリーンショット 2023-12-22 0.42.30.png

print(len(train), len(test), len(data))
312 313 625

欠損値の確認

data.isnull().sum()

スクリーンショット 2023-12-22 0.38.54.png

不要列の削除

delete_columns = ['Unnamed: 0']
data.drop(delete_columns, axis=1, inplace=True)
data.head()

スクリーンショット 2023-12-22 0.43.25.png

学習データとテストデータの抽出

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()

スクリーンショット 2023-12-22 0.44.40.png

y_train.head()

スクリーンショット 2023-12-22 0.44.50.png

機械学習

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
スクリーンショット 2023-12-22 0.48.21.png

右下の投稿をクリックし、ファイルを選択からsubmit.csvをアップロードします。
これにより、結果を提出することができました。
暫定評価は0.8881789でした。
このコンペは、アヤメの分類と同じく取り組みやすいコンペなので、初心者におすすめです。
引き続き、テーブルコンペの練習問題に取り組んでいきます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?