見出し画像

非エンジニアでも機械学習でナンバーズ3を予測する方法

👆読み込ませた過去データです。

実行結果では「508」と出ました。7/31に期待

はじめに

ナンバーズ3は、日本の宝くじの一つで、3桁の数字を予測するゲームです。この記事では、Google Colabを使用して、機械学習を使って次に出るナンバーズ3の数字を予測する方法を詳しく解説します。Pythonのコードを使って、データの読み込みから前処理、モデルの構築、トレーニング、予測までの一連の流れを紹介します。これにより、機械学習の基礎を理解し、実際の問題に適用する能力を身につけることができます。

Google Colabの使い方

Google Colabとは?

Google Colabは、Googleが提供するクラウドベースのJupyterノートブック環境です。Pythonコードをブラウザ上で実行でき、GPUやTPUを使用した高速計算が可能です。特に、データサイエンスや機械学習のプロジェクトに便利です。

Google Colabのセットアップ

  1. Googleアカウントでログイン: Google Colabを使用するには、Googleアカウントが必要です。まず、Googleアカウントにログインします。

  2. Google Colabにアクセス: ブラウザでGoogle Colabにアクセスします。

  3. 新しいノートブックを作成: Google Colabのホームページで、「新しいノートブック」をクリックします。これで、新しいPythonノートブックが作成されます。

ナンバーズ3予測のためのデータ準備

まず、予測に使用するデータを用意します。データは、過去のナンバーズ3の当選番号を含むCSVファイルです。このファイルをGoogle Colabにアップロードして使用します。

データのアップロード

  1. Google Colabにデータをアップロード: Google Colabの左サイドバーから「ファイル」をクリックし、「ファイルをアップロード」を選択して、ナンバーズ3のデータが含まれるCSVファイルをアップロードします。

  2. ファイルパスの取得: アップロードしたファイルのパスを取得します。通常、アップロードしたファイルは`/content/`ディレクトリに保存されます。

Pythonコードの実装

以下に、Google Colab上で実行するPythonコードの詳細な説明を示します。このコードは、ナンバーズ3の当選番号を予測するために必要なすべてのステップを含んでいます。

ライブラリのインストールとインポート

まず、必要なライブラリをインストールし、インポートします。

!pip install pandas numpy scikit-learn tensorflow imbalanced-learn

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
from imblearn.over_sampling import SMOTE
from collections import Counter

データの読み込み

アップロードしたCSVファイルを読み込みます。ファイルパスは`/content/`ディレクトリ内のファイル名を指定します。

from google.colab import files
uploaded = files.upload()

file_path = next(iter(uploaded.keys()))
data = pd.read_csv(file_path)

print(data.head())

データの前処理

次に、データの前処理を行います。特徴量(X)とターゲット(y)を設定し、データのバランスを調整します。

X = data.iloc[:, :-1].values  # 最後の列以外を特徴量として使用
y = data.iloc[:, -1].values   # 最後の列をターゲットとして使用

class_counts = Counter(y)

# サンプル数が少ないクラスをフィルタリング
min_samples_threshold = 2
filtered_indices = [i for i, cls in enumerate(y) if class_counts[cls] >= min_samples_threshold]
X_filtered = X[filtered_indices]
y_filtered = y[filtered_indices]

# 各クラスのサンプル数を再カウント
class_counts_filtered = Counter(y_filtered)

# SMOTEのk_neighborsパラメータをクラスごとに設定
k_neighbors = min(5, min(class_counts_filtered.values()) - 1) if min(class_counts_filtered.values()) > 1 else 1

# データのバランス調整
smote = SMOTE(random_state=42, k_neighbors=k_neighbors)
X_resampled, y_resampled = smote.fit_resample(X_filtered, y_filtered)

ターゲットのエンコードとデータの分割

ターゲットをエンコードし、データをトレーニングセットとテストセットに分割します。

num_classes = np.max(y_resampled) + 1  # yの最大値に1を足したものをクラス数とする
y_encoded = to_categorical(y_resampled, num_classes=num_classes)

X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_encoded, test_size=0.2, random_state=42)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

モデルの構築とトレーニング

深層学習モデルを構築し、トレーニングします。ここでは、過学習を防ぐためにドロップアウト層を追加し、モデルのアーキテクチャを強化しています。

model = Sequential()
model.add(Dense(256, input_dim=X_train.shape[1], activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(64, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

optimizer = Adam(learning_rate=0.001)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])

history = model.fit(X_train, y_train, epochs=150, batch_size=32, validation_split=0.2, verbose=2)

予測と結果の表示

トレーニングしたモデルを使用して予測を行い、上位10個の予測値とその確率を表示します。

predictions = model.predict(X_test)

predicted_classes = np.argmax(predictions, axis=1)
predicted_probabilities = np.max(predictions, axis=1)

top_10_indices = np.argsort(predicted_probabilities)[-10:]
top_10_values = predicted_classes[top_10_indices]
top_10_probabilities = predicted_probabilities[top_10_indices] * 100

for i, (value, prob) in enumerate(zip(top_10_values, top_10_probabilities)):
    print(f"予測値 {i+1}: {value}, 確率: {prob:.2f}%")

まとめ

この記事では、Google Colabを使用してナンバーズ3の次の当選番号を予測する方法を詳しく解説しました。機械学習の基本的な手順として、データの前処理、モデルの構築、トレーニング、予測を行いました。この方法を応用することで、他の予測問題にも取り組むことができます。

ぜひ、この記事を参考にして、実際にGoogle Colabでナンバーズ3の予測に挑戦してみてください。機械学習の技術を駆使して、次の当選番号を予測する楽しみを体験しましょう。


この記事が気に入ったらサポートをしてみませんか?