· Отчет об анализе проекта
· Отчет о проекте
· О наборе данных
· Модель
· Код фляги
· 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>