· Отчет об анализе проекта

· Отчет о проекте

· О наборе данных

· Модель

· Код фляги

· HTML-код

Аналитический отчет

Введение

Цель этого проекта — предсказать количество калорий, сожженных человеком, на основе различных факторов, таких как возраст, пол, вес, рост и уровень активности. Этот прогноз может быть полезен для людей, которые пытаются похудеть или поддерживать свой текущий вес, контролируя потребление и расход калорий.

Сбор данных

Набор данных, используемый для этого проекта, — это набор данных «Сожженные калории» от Kaggle. Набор данных содержит информацию о 1500 человек, включая их возраст, пол, вес, рост и уровень активности, а также количество калорий, которые они сожгли во время определенной деятельности.

Подготовка данных

Первым шагом в подготовке данных является удаление любых пропущенных значений или выбросов. После очистки данных их можно разделить на наборы данных для обучения и тестирования. Набор обучающих данных используется для обучения модели машинного обучения, а набор тестовых данных используется для оценки производительности модели.

Выбор модели и обучение

Для этого проекта можно использовать несколько алгоритмов машинного обучения, включая линейную регрессию, деревья решений и нейронные сети. В этом проекте мы будем использовать весь алгоритм регрессии, а затем выберем лучший из них для нашей модели.

Модель обучается с использованием обучающего набора данных, а производительность оценивается с использованием тестового набора данных. После обучения и оценки модели ее можно использовать для прогнозирования новых данных.

Полученные результаты

Результаты модели можно оценить с помощью нескольких показателей, включая среднеквадратичную ошибку, среднюю абсолютную ошибку и R-квадрат. Эти показатели можно использовать для определения того, насколько хорошо работает модель и нуждается ли она в улучшении.

Код модели:

Import numpy as np
Import pandas as pd
exercise.head()
[21]
calories= pd.read_csv("calories.csv")
[22]
calories.head()
[23]
calories_df = pd.concat([exercise.drop('User_ID',axis=1),calories['Calories']],axis=1)
calories_df
[24]
calories_df.shape
(15000, 8)
[25]
calories_df.describe()
EDA
[26]
import seaborn as sns
import matplotlib.pyplot as plt
[27]
calories_df.head(3)
[28]
sns.scatterplot(x=calories_df['Height'],y=calories_df['Weight'])
<AxesSubplot:xlabel='Height', ylabel='Weight'>

[29]
sns.scatterplot(x=calories_df['Duration'],y=calories_df['Heart_Rate'])
<AxesSubplot:xlabel='Duration', ylabel='Heart_Rate'>

[30]
sns.countplot(x=calories_df['Gender'])
<AxesSubplot:xlabel='Gender', ylabel='count'>

[31]
sns.distplot(x=calories_df['Age'])
plt.show()

[32]
sns.distplot(x=calories_df['Height'])
plt.show()

[33]
sns.distplot(x=calories_df['Weight'])
plt.show()

[34]
corelation = calories_df.corr()
[35]
corelation
[36]
sns.heatmap(corelation,cbar=True,square=True,annot=True, cmap='coolwarm')

[37]
# Map gender categories to numeric values
gender_map = {'male': 0, 'female': 1}
calories_df['Gender'] = calories_df['Gender'].map(gender_map)
Splitting trainnig and testing
[38]
X= calories_df.drop('Calories',axis=1)
y = calories_df['Calories']
[39]
X.shape
(15000, 7)
[40]
y.shape
(15000,)
[41]
from sklearn.model_selection import train_test_split
[42]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2)
Training Models
[58]
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.tree import DecisionTreeRegressor
from xgboost import XGBRFRegressor
from sklearn.metrics import mean_squared_error,r2_score
[59]
models = {
    'lr':LinearRegression(),
    "rfr":RandomForestRegressor(),
    'dtr’: DecisionTreeRegressor(),
    'xg':XGBRegressor()
}

for name, mod in models.items():
    mod.fit(X_train,y_train)
    ypred = mod.predict(X_test)
    print(f"{name}  mse: {mean_squared_error(y_test,ypred)} r2 score: {r2_score(y_test,ypred)}")
    
lr  mse: 130.08707386188388 r2 score: 0.9668790377181355
rfr  mse: 7.1466232 r2 score: 0.9981804261528612
dtr  mse: 28.453666666666667 r2 score: 0.992755522954971
xg  mse: 4.53426242569831 r2 score: 0.9988455491362879
selecting model
[61]
model = XGBRegressor()
model.fit(X_train,y_train)
y_pred = model.predict(X_test)
Predictive System
[66]
X_train
[64]
def pred(Gender,Age,Height,Weight,Duration,Heart_Rate,Body_Temp):
    features = np.array([[Gender,Age,Height,Weight,Duration,Heart_Rate,Body_Temp]])
    prediction = model.predict(features).reshape(1,-1)
    return prediction[0]
[67]
Gender = 1
Age = 36
Height = 167.0
Weight = 64.0
Duration = 28.0
Heart_Rate = 108.0
Body_Temp = 40.0


result = pred(Gender,Age,Height,Weight,Duration,Heart_Rate,Body_Temp)
print("you consumed this much calories",result)
you consumed this much calories [181.36513]
[68]
import pickle
pickle.dump(model,open('model.pkl','wb'))

Код фляги:

import numpy as np
import pandas as pd
import pickle
from flask import Flask, request, render_template

#creating app
app = Flask(__name__)

# laoding model
model = pickle.load(open('model.pkl','rb'))
train = pd.read_csv('X_train.csv')
#giving paths
@app.route('/')
def index():
    # sending by default data
    Age  = train['Age'].values
    Height  = train['Height'].values
    Weight  = train["Weight"].values
    Duration  = train['Duration'].values
    Heart_Rate  = train['Heart_Rate'].values
    Body_Temp  = train['Body_Temp'].values
    print(Age)
    return render_template('index.html',a=Age,h=Height,w=Weight,d=Duration,hr=Heart_Rate,b=Body_Temp)

@app.route('/predict',methods=['POST'])
def predict():
    Gender  = request.form['Gender']
    Age = request.form['Age']
    Height = request.form['Height']
    Weight = request.form['Weight']
    Duration = request.form['Duration']
    Heart_Rate = request.form['Heart_Rate']
    Body_Temp = request.form['Body_Temp']

    featurs = np.array([[Gender,Age,Height,Weight,Duration,Heart_Rate,Body_Temp]])
    pred = model.predict(featurs).reshape(1,-1)
    return render_template('index.html', output = pred[0])

#python main
if __name__ == "__main__":
    app.run(debug=True)

HTML-код:

HTML Code:
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Calories Burnt Prediction</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
  </head>
  <body style="background:cyan;color:black;">

  <div class="container my-3 mt-3">
      <h1 class="text-center">Calories Burnt Prediction Model</h1>

      <form action="/predict" method="post">
          <div class="row">
              <div class="form-group col-md-4">
                  <label for="gender">Gender</label>
                  <select name="Gender" id="Gender" class="form-control">
                      <option value="1">male</option>
                      <option value="0">female</option>
                  </select>
              </div>

               <div class="form-group col-md-4">
                  <label for="Age">Age</label>
                  <select name="Age" id="Age" class="form-control">
                      {% for i in a %}
                      <option value="{{i}}">{{i}}</option>
                      {% endfor %}
                  </select>
              </div>
<!--               Age    Height Weight Duration   Heart_Rate Body_Temp-->
               <div class="form-group col-md-4">
                  <label for="Height">Height</label>
                  <select name="Height" id="Height" class="form-control">
                      {% for i in h %}
                      <option value="{{i}}">{{i}}</option>
                      {% endfor %}
                  </select>
              </div>
          </div>


          <div class="row">
              <div class="form-group col-md-4">
                  <label for="Weight">Weight</label>
                  <select name="Weight" id="Weight" class="form-control">
                      {% for i in w %}
                      <option value="{{i}}">{{i}}</option>
                      {% endfor %}
                  </select>
              </div>

               <div class="form-group col-md-4">
                  <label for="Duration">Duration</label>
                  <select name="Duration" id="Duration" class="form-control">
                      {% for i in d %}
                      <option value="{{i}}">{{i}}</option>
                      {% endfor %}
                  </select>
              </div>
               <div class="form-group col-md-4">
                  <label for="Heart_Rate">Heart_Rate</label>
                  <select name="Heart_Rate" id="Heart_Rate" class="form-control">
                      {% for i in hr %}
                      <option value="{{i}}">{{i}}</option>
                      {% endfor %}
                  </select>
              </div>
          </div>

          <div class="row">
              <div class="form-group">
                  <label for="Body_Temp">Body_Temp</label>
                  <select name="Body_Temp" id="Body_Temp" class="form-control">
                      {% for i in b %}
                      <option value="{{i}}">{{i}}</option>
                      {% endfor %}
                  </select>
              </div>
          </div>

          <button type="submit" class="btn btn-primary btn-lg">get prediction</button>
      </form>

      <p style="margin-left:20px;padding:30px,30px,30xp,30px">Calories you consumed{{output}}</p>
  </div>


    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
  </body>
</html>