丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
现在有非常多的运动穿戴设备,比如简单的小米手环,到fitbit,到applewatch,而数据科学领域的从业者们,我们众多的数据分析师和数据科学家,可以轻松分析健身设备上收集的数据,把数据科学和医疗保健结合起来。
我们先导入所需工具库,并读取数据:
我们先看看这个数据集的缺失值情况:
我们可以通过info和describe查看数据基本信息。
我们通过describe函数查看一下数据集的描述性统计数据。
数据集中的“卡路里”列记录了每天燃烧多少卡路里,我们基于它做一点分析。
从上图可以看出,每日热量消耗与所采取的总步数之间存在直接关联。同样的思路我们分析一下总路程和消耗卡路里的关系:
一些观察结论:
下面我们展开做一点更详细的分析,我们先抽取更细化的信息,我们添加一个新字段“Day”记录星期几。
下面我们可视化对比一下一周中每一天的『非常活跃』、『相当活跃』和『轻度活跃』的分钟数。
让我们看看一周中每一天的非活动分钟数。
从这份数据看来,星期四是大家最不活跃的一天。下面我们来看看一周中每一天燃烧的卡路里数。
从上图可以看出,星期二是这份数据集中的用户最活跃的日子之一,这一天燃烧的卡路里最多。下面我们分析一下每日步数:
下面我们搭建一个模型,对于每日消耗的卡路里进行建模预估。
我们剔除ID类特征和日期特征,把『Calories』作为目标,把其他字段作为特征,注意其中的『星期几/Day』字段是类别型,我们要单独编码一下。
features=['TotalSteps','TotalDistance','TrackerDistance','LoggedActivitiesDistance','VeryActiveDistance','ModeratelyActiveDistance','LightActiveDistance','SedentaryActiveDistance','VeryActiveMinutes','FairlyActiveMinutes','LightlyActiveMinutes','SedentaryMinutes','TotalMinutes','Day']target='Calories'#数据切分fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(data[features],data[target],test_size=0.2,random_state=0)#使用lightgbm训练fromlightgbmimportLGBMRegressorlgbm=LGBMRegressor(n_estimators=1000,learning_rate=0.05,random_state=0)#「星期几」字段编码fromsklearn.preprocessingimportLabelEncoderle=LabelEncoder()X_train['Day']=le.fit_transform(X_train['Day'])X_test['Day']=le.transform(X_test['Day'])#拟合模型lgbm.fit(X_train,y_train)#测试集预估predictions=lgbm.predict(X_test)#计算测试集RMSEfromsklearn.metricsimportmean_squared_errorrmse=np.sqrt(mean_squared_error(y_test,predictions))print("RMSE:%f"%(rmse))运行得到结果为RMSE:373.128953
为了更准确地进行建模和评估,我们使用网格搜索交叉验证进行超参数优化:
#使用网格搜索对lightgbm模型进行超参数调优fromsklearn.model_selectionimportGridSearchCVparameters={'learning_rate':[0.02,0.05,0.08,0.1],'max_depth':[5,7,10],'feature_fraction':[0.6,0.8,0.9],'subsample':[0.6,0.8,0.9],'n_estimators':[100,200,500,1000]}#网格搜索grid_search=GridSearchCV(lgbm,parameters,cv=5,n_jobs=-1,verbose=1)#最佳模型grid_search.fit(X_train,y_train)best_lgbm=grid_search.best_estimator_#输出最佳超参数print(grid_search.best_params_)#测试集预估predictions=best_lgbm.predict(X_test)#计算RMSEfromsklearn.metricsimportmean_squared_errorrmse=np.sqrt(mean_squared_error(y_test,predictions))print("RMSE:%f"%(rmse))最终结果输出
{'feature_fraction':0.6,'learning_rate':0.05,'max_depth':5,'n_estimators':1000,'subsample':0.6}RMSE:352.782209我们可以看到,调参后的模型在测试集上表现更优。最后我们输出一下特征重要度,看看那些因素对于卡路里消耗更加重要:
可以看到,每日总步数对结果影响最大,大家要多多抬腿多多运动!