プロジェクト背景と目的 フィットネスは現代生活の重要な一部となっており、運動中のカロリー消費を正確に予測することは、個別化されたフィットネスプランを策定する上で重要な意味を持ちます。本プロジェクトでは、深層学習に基づく予測モデルを構築し、Gradioフレームワークを用いてユーザーインターフェースを実装することで、フィットネスカロリー消費の迅速な予測を実現します。
データ処理とモデル訓練
データソース:Kaggleプラットフォームのフィットネス会員の運動追跡データセットを使用し、973件の記録と15の特徴量を含んでいます。 データ前処理:数値特徴量を標準化し、カテゴリ特徴量をワンホットエンコーディングし、データセットを訓練セットとテストセットに分割しました。 モデル構築:3つの全結合層を含むニューラルネットワークを構築し、ReLU活性化関数とDropout層を使用して過学習を防止しました。 訓練プロセス:Adamオプティマイザを使用し、学習率0.001で200エポック訓練しました。損失が徐々に減少し、最終的にテストセットで良好な予測結果を達成しました。
# モデル訓練のコード例
for epoch in range(total_epochs):
model.train_mode()
epoch_loss_value = 0
for input_data, target_values in training_loader:
optimizer.clear_gradients()
predictions = model(input_data)
loss = loss_function(predictions, target_values)
loss.backward()
optimizer.update()
epoch_loss_value += loss.data
average_loss = epoch_loss_value / len(training_loader)
loss_history.append(average_loss)
if (epoch + 1) % 10 == 0:
print(f'エポック [{epoch + 1}/{total_epochs}], 損失: {average_loss:.4f}')
Gradioフレームワークの応用
フレームワーク紹介:Gradioは機械学習モデルのWebインターフェースを迅速に構築できるオープンソースライブラリで、シンプルで強力な機能を備えています。 フロントエンド実装:Gradioを使用して複数のスライダーとボタンを含むインターフェースを構築しました。ユーザーはスライダーで個人情報とフィットネスデータを入力し、ボタンをクリックして予測機能をトリガーし、結果を表示できます。
# Gradioフロントエンドインターフェースレイアウトのコード例
with gr.Blocks(theme=gr.themes.Soft()) as demo_interface:
gr.Markdown("### フィットネスカロリー消費予測ツール")
gr.Markdown("フィットネスデータに基づいてカロリー消費量を予測します")
with gr.Row():
with gr.Column():
gr.Markdown("#### 基本情報")
user_age = gr.Slider(minimum=15, maximum=80, step=1, value=30, label="年齢(歳)")
user_weight = gr.Slider(minimum=40, maximum=150, step=0.5, value=70, label="体重(kg)")
user_height = gr.Slider(minimum=1.4, maximum=2.2, step=0.01, value=1.75, label="身長(m)")
user_bmi = gr.Slider(minimum=15, maximum=40, step=0.1, value=22.5, label="BMI(体重指数)")
with gr.Column():
gr.Markdown("#### フィットネスデータ")
max_heart_rate = gr.Slider(minimum=100, maximum=220, step=1, value=180, label="最大心拍数(BPM)")
avg_heart_rate = gr.Slider(minimum=60, maximum=200, step=1, value=140, label="平均心拍数(BPM)")
resting_heart_rate = gr.Slider(minimum=40, maximum=100, step=1, value=70, label="安静時心拍数(BPM)")
session_length = gr.Slider(minimum=0.25, maximum=3.0, step=0.25, value=1.0, label="トレーニング時間(時間)")
with gr.Row():
with gr.Column():
gr.Markdown("#### 体組成")
body_fat = gr.Slider(minimum=5, maximum=40, step=0.5, value=18, label="体脂肪率(%)")
water_consumption = gr.Slider(minimum=0.5, maximum=5.0, step=0.25, value=2.0, label="水分摂取量(リットル)")
with gr.Column():
gr.Markdown("#### トレーニング習慣")
workout_freq = gr.Slider(minimum=1, maximum=7, step=1, value=4, label="週間トレーニング日数")
experience_years = gr.Slider(minimum=1, maximum=10, step=1, value=5, label="フィットネス経験(年)")
user_gender = gr.Radio(choices=["男性", "女性"], label="性別", value="男性")
exercise_type = gr.Dropdown(
choices=["有酸素運動", "筋力トレーニング", "HIIT", "ヨガ", "クロスフィット"],
label="運動タイプ",
value="有酸素運動"
)
predict_button = gr.Button("カロリー消費を予測 🚀")
prediction_output = gr.Number(label="予測カロリー消費(キロカロリー)", value=0)
predict_button.click(
fn=calculate_calories,
inputs=[user_age, user_weight, user_height, max_heart_rate, avg_heart_rate, resting_heart_rate, session_length, body_fat, water_consumption, workout_freq, experience_years, user_bmi, user_gender, exercise_type],
outputs=prediction_output
)
gr.Markdown("### 使用方法")
gr.Markdown("1. 個人情報とフィットネスデータを入力してください")
gr.Markdown("2. 「カロリー消費を予測」ボタンをクリックしてください")
gr.Markdown("3. 予測されたカロリー消費量を確認してください")
gr.Markdown("**注意**:このモデルはフィットネスデータに基づいて訓練されており、予測結果は参考値です")
demo_interface.launch(share=True, debug=True)
数値入力後のインターフェース表示効果
モデル評価と最適化
評価指標:テストセットでは、モデルの平均二乗誤差(MSE)が1769.9657、R²値が0.9788であり、高い予測精度を示しています。 最適化方法:ネットワーク構造の調整(Dropout層の追加など)、ハイパーパラメータの最適化(学習率、バッチサイズなど)を通じてモデルの性能を向上させました。 深層ニューラルネットワーク(DNN):複雑な非線形関係のデータ処理に適しており、強力な特徴学習能力を持っていますが、モデル訓練に時間がかかります。 長短期記憶ネットワーク(LSTM):時系列データの処理に適しており、データ内の時間依存関係を捕捉できますが、非時系列データでの効果は限定的です。 畳み込みニューラルネットワーク(CNN):主に画像データの処理に使用され、コンピュータビジョン分野で優れた性能を発揮しますが、1次元データの処理能力は限定的です。