1.读取数据与可视化
1.1 读数据表
手机定价数据集共有2000个样本,每个样本有21个特征,该数据集包含了一系列手机的型号,及其各种配置信息和价格范围,其中价格范围有四个取值,0表示廉价,1表示价格一般,2表示价格昂贵,3表示价格十分昂贵。本案例将利用机器学习算法来预测一个特定配置手机的售价范围。
battery_power | blue | clock_speed | dual_sim | fc | four_g | int_memory | m_dep | mobile_wt | n_cores | pc | px_height | px_width | ram | sc_h | sc_w | talk_time | three_g | touch_screen | wifi | price_range |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
842 | 0 | 2.2 | 0 | 1 | 0 | 7 | 0.6 | 188 | 2 | 2 | 20 | 756 | 2549 | 9 | 7 | 19 | 0 | 0 | 1 | 1 |
1021 | 1 | 0.5 | 1 | 0 | 1 | 53 | 0.7 | 136 | 3 | 6 | 905 | 1988 | 2631 | 17 | 3 | 7 | 1 | 1 | 0 | 2 |
563 | 1 | 0.5 | 1 | 2 | 1 | 41 | 0.9 | 145 | 5 | 6 | 1263 | 1716 | 2603 | 11 | 2 | 9 | 1 | 1 | 0 | 2 |
615 | 1 | 2.5 | 0 | 0 | 0 | 10 | 0.8 | 131 | 6 | 9 | 1216 | 1786 | 2769 | 16 | 8 | 11 | 1 | 0 | 0 | 2 |
1821 | 1 | 1.2 | 0 | 13 | 1 | 44 | 0.6 | 141 | 2 | 14 | 1208 | 1212 | 1411 | 8 | 2 | 15 | 1 | 1 | 0 | 1 |
1.2 缺失值检测
首先,检查数据集中的数据是否存在缺失情况。
数据缺失值情况:
列名 | 缺失值数量 |
---|---|
battery_power | 0 |
blue | 0 |
clock_speed | 0 |
dual_sim | 0 |
fc | 0 |
four_g | 0 |
int_memory | 0 |
m_dep | 0 |
mobile_wt | 0 |
n_cores | 0 |
过滤的缺失值行数:0
结果显示数据集不存在缺失值。
1.3 各价位手机数量柱状图
下面进行探索性分析,首先查看建模目标字段price_range
,有四个取值,分别为0,1,2,3,代表四种不同的手机价格区间等级,下面绘制柱状图分析不同价格区间手机数量的差异。
根据柱状图可以看出四个手机价格区间样本数量分布非常平均,不存在类别不平衡的现象。
1.4 是否支持双卡双待与价格
下面绘制分组柱状图查看是否支持双卡双待和不同价格范围下手机型号数量。
根据柱状图可以看出支持双卡双待功能与否和不同手机价格范围下手机型号数量几乎是相同的。
1.5 是否支持触屏与价格
下面绘制分组柱状图查看是否支持触屏和不同价格范围下手机型号数量。
由上图可知,不支持触屏的手机类型中,价格范围高的手机类型数量较多;相反,支持触屏的手机类型中,价格范围低的手机类型数量较多。
1.6 是否支持wifi与价格
下面绘制分组柱状图查看是否支持WiFi和不同价格范围下手机型号数量。
从总体看,支持WiFi的手机型号数量较多。
2.模型建立
2.1 训练/测试集划分
采用分层抽样的方式,按1:4划分测试集与训练集合,分层列为price_range
,划分后测试集有400个样本,训练集有1600个样本。
2.2 逻辑回归
建立逻辑回归模型,因为不存在数据不均衡情况,所以将类别权重参数设置为None
。
系数
battery_power | blue | clock_speed | dual_sim | fc | four_g | int_memory | m_dep | mobile_wt | n_cores | pc | px_height | px_width | ram | sc_h | sc_w | talk_time | three_g | touch_screen | wifi |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
-0.001233 | 0.006289 | 0.026247 | 0.008301 | 0.004629 | 0.007306 | 0.028895 | 0.004824 | 0.040193 | 0.070216 | 0.058744 | -0.001898 | 0.000413 | -0.004953 | 0.120952 | 0.044533 | 0.075047 | 0.009742 | 0.0098 | 0.008051 |
-0.000042 | 0.002672 | 0.000175 | 0.004762 | 0.012212 | 0.00305 | 0.010526 | 0.004893 | 0.011462 | -0.006875 | 0.012211 | -0.000238 | 0.000263 | -0.000772 | 0.03372 | -0.004603 | 0.039425 | 0.002049 | 0.004272 | 0.001893 |
0.000438 | -0.000291 | -0.000501 | -0.003229 | 0.005218 | -0.006023 | -0.013776 | -0.002497 | -0.010177 | 0.01005 | -0.020354 | 0.000626 | -0.000247 | 0.001801 | -0.047554 | -0.013716 | -0.027242 | 0.000348 | -0.006768 | -0.002654 |
0.000837 | -0.008671 | -0.025921 | -0.009834 | -0.022058 | -0.004333 | -0.025645 | -0.007219 | -0.041478 | -0.07339 | -0.050601 | 0.00151 | -0.00043 | 0.003925 | -0.107118 | -0.026214 | -0.08723 | -0.012138 | -0.007303 | -0.00729 |
2.3 逻辑回归模型预测
使用训练好的逻辑回归模型对测试集数据进行预测,得到预测结果label_predict
。
battery_power | blue | clock_speed | dual_sim | fc | four_g | int_memory | m_dep | mobile_wt | n_cores | pc | px_height | px_width | ram | sc_h | sc_w | talk_time | three_g | touch_screen | wifi | price_range | price_range_predict |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
842 | 0 | 2.2 | 0 | 1 | 0 | 7 | 0.6 | 188 | 2 | 2 | 20 | 756 | 2549 | 9 | 7 | 19 | 0 | 0 | 1 | 1 | 2 |
1021 | 1 | 0.5 | 1 | 0 | 1 | 53 | 0.7 | 136 | 3 | 6 | 905 | 1988 | 2631 | 17 | 3 | 7 | 1 | 1 | 0 | 2 | 2 |
563 | 1 | 0.5 | 1 | 2 | 1 | 41 | 0.9 | 145 | 5 | 6 | 1263 | 1716 | 2603 | 11 | 2 | 9 | 1 | 1 | 0 | 2 | 2 |
615 | 1 | 2.5 | 0 | 0 | 0 | 10 | 0.8 | 131 | 6 | 9 | 1216 | 1786 | 2769 | 16 | 8 | 11 | 1 | 0 | 0 | 2 | 3 |
1821 | 1 | 1.2 | 0 | 13 | 1 | 44 | 0.6 | 141 | 2 | 14 | 1208 | 1212 | 1411 | 8 | 2 | 15 | 1 | 1 | 0 | 1 | 1 |
2.4 逻辑回归模型评估
进行模型评估,得到分类报告、混淆矩阵和ROC曲线。
分类报告(classification report)
标签 | 精确率(Precision) | 召回率(Recall) | F1值(F1-score) |
---|---|---|---|
0 | 0.87 | 0.84 | 0.85 |
1 | 0.64 | 0.64 | 0.64 |
2 | 0.56 | 0.54 | 0.55 |
3 | 0.74 | 0.79 | 0.76 |
accuracy | 0.7 | 0.7 | 0.7 |
macro avg | 0.7 | 0.7 | 0.7 |
weighted avg | 0.7 | 0.7 | 0.7 |
混淆矩阵(confusion matrix)
由于样本各类数量比较平均,模型评价结果具有参考价值。 逻辑回归模型的准确率为0.7,精确率为0.7,召回率为0.7,F1值为0.7。分类效果不是很理想,因此尝试选取其他算法来提升分类效果。
2.5 分类决策树
使用决策树算法训练手机定价预测模型。
特征重要度
决策树模型可视化
根据特征重要性条形图,发现模型最重要的特征为ram
(随机存取储存器内存)。
2.6 决策树模型预测
使用训练好的决策树分类器对测试集数据进行预测,得到预测结果label_predict
。
battery_power | blue | clock_speed | dual_sim | fc | four_g | int_memory | m_dep | mobile_wt | n_cores | pc | px_height | px_width | ram | sc_h | sc_w | talk_time | three_g | touch_screen | wifi | price_range | price_range_predict |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
842 | 0 | 2.2 | 0 | 1 | 0 | 7 | 0.6 | 188 | 2 | 2 | 20 | 756 | 2549 | 9 | 7 | 19 | 0 | 0 | 1 | 1 | 1 |
1021 | 1 | 0.5 | 1 | 0 | 1 | 53 | 0.7 | 136 | 3 | 6 | 905 | 1988 | 2631 | 17 | 3 | 7 | 1 | 1 | 0 | 2 | 2 |
563 | 1 | 0.5 | 1 | 2 | 1 | 41 | 0.9 | 145 | 5 | 6 | 1263 | 1716 | 2603 | 11 | 2 | 9 | 1 | 1 | 0 | 2 | 2 |
615 | 1 | 2.5 | 0 | 0 | 0 | 10 | 0.8 | 131 | 6 | 9 | 1216 | 1786 | 2769 | 16 | 8 | 11 | 1 | 0 | 0 | 2 | 2 |
1821 | 1 | 1.2 | 0 | 13 | 1 | 44 | 0.6 | 141 | 2 | 14 | 1208 | 1212 | 1411 | 8 | 2 | 15 | 1 | 1 | 0 | 1 | 1 |
2.7 决策树模型评估
进行模型评估,得到混淆矩阵分类报告和ROC曲线。
分类报告(classification report)
标签 | 精确率(Precision) | 召回率(Recall) | F1值(F1-score) |
---|---|---|---|
0 | 0.94 | 0.94 | 0.94 |
1 | 0.78 | 0.9 | 0.84 |
2 | 0.87 | 0.7 | 0.78 |
3 | 0.89 | 0.93 | 0.91 |
accuracy | 0.87 | 0.87 | 0.87 |
macro avg | 0.87 | 0.87 | 0.87 |
weighted avg | 0.87 | 0.87 | 0.87 |
混淆矩阵(confusion matrix)
发现测试集上预测效果比逻辑回归效果好,总体的准确率达到0.87,精确率为0.87,召回率0.87,F1值为0.87。并且对第2类预测的准确率也有提高,相比较逻辑回归,决策树更适合该模型。
总结
根据上述分析,该手机数据集更适合决策树模型,总体的准确率达到0.87,精确率为0.87,召回率0.87,F1值为0.87,其中ram
、battery_power
、px_height
、px_width
对手机价格的影响比较大。