社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

给女朋友买了只口红,结果她跟我说分手?掌握了机器学习再买买买吧!

养码场 • 6 年前 • 586 次点击  

过完年,压岁钱到位,迟来的年终奖到账,钱包鼓起来但新的节日也不断跟上,情人节、元宵节、妇女节……


说到底,还不是要买买买?


淘宝上的店铺又多又杂乱,一旦买错了,面临的就是“女朋友的“果真直男审美的diss,或者人财两空的局面



接下去,来看看用机器学习技术如何甄别优质店铺,让你买到就是赚到!


分三步走:

第一步:找到阿里给出的店铺评价历史信息,分为训练集数据和测试集数据;

第二步:利用训练集数据构建机器学习模型;

第三步:使用测试集数据进行准确率判断并优化。


如此便可以建立一个相对科学的靠谱店铺预测模型。



首先,从阿里云天池开一份包含2000家店铺的评分,等级,评论等信息和数年交易记录的数据:




通过这份数据,我们可以构建一套模型,根据店铺的访问、购买信息等数据,来评测该店铺是否为优质店铺。


一部分数据将用来作为训练集,另一部分数据会用来测试已经训练好模型的精确度。但训练的时候并不是精确度越高越好,过拟合和欠拟合都不是好事情。


欠拟合指模型没有很好地捕捉到数据特征,不能够很好地拟合数据:



过拟合通俗一点地说就是模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,即不能正确的分类,模型泛化能力太差:




随后,完成了清理整合等预处理工作,得到了一份适合建模使用的样本数据:


*完整代码可以在文末获取。考虑这份数据比较粗糙,我们仅使用0分店铺和4分店铺的数据


导入所需的包、填充数据空值,再拆分提取训练集和测试集数据,并将数据进行标准化,就为后续的模型构建做足了准备。



 模型的构建及其效果——以决策树为例 


我在常用模型中随意选了决策树模型来演示:


#决策树
max_depth_l = [2,3,4,5,6,7,8,9,10]
for max_depth in max_depth_l:
    dt_model = DecisionTreeClassifier(max_depth=max_depth)
    dt_model.fit(x_train_scaled,y_train)
    train_accuracy = dt_model.score(x_train_scaled,y_train)
    test_accuracy = dt_model.score(x_test_scaled,y_test)
    print('max depth',max_depth)
    print('训练集上的准确率:{:2f}%'.format(train_accuracy*100))
    print('测试集上的准确率:{:2f}%'.format(test_accuracy*100))


决策树,需要调节的主要参数是树的深度。深度越浅,容易造成欠拟合;而深度越深,则会过拟合。


其实使用这个模型很简单,我们建立一个列表,罗列不同的深度,建立模型进行尝试,最终选择在测试集上表现最好的模型就可以了。





当深度增加的时候,模型在训练集上的准确率越来越高,而在测试集上的准确率在降低,这个就是过拟合的表现。在深度为5的时候,测试集的准确率为最高的73.39%,所以这组模型为决策树的最佳模型。



模型的效果——用混淆矩阵查看 


绘制一个混淆矩阵查看模型效果:


dt_model = DecisionTreeClassifier(max_depth=5)
dt_model.fit(x_train_scaled,y_train)
predictions = dt_model.predict(x_test_scaled)
test_accuracy = dt_model.score(x_test_scaled,y_test)
print(classification_report(y_test,predictions))
print('决策树的准确率:{:2f}%'.format(test_accuracy*100))

cnf_matrix = confusion_matrix(y_test,predictions)
plot_confusion_matrix(cnf_matrix, classes=[0,1],
                      title='Confusion matrix')

 

*横坐标是预测值,即“模型认为该店铺为差评/优质店铺”,纵坐标代表真实值,即“该店铺为差评/优质店铺”。0为差评,1为优质


模型在预测优质店铺上容易误杀,把优质店铺预测为差评店铺,错误达到43个,不过店铺茫茫多,错过这个还有下个,本着宁可错杀,不能放过的原则,模型还是可以的。


更强大的模型:随机森林 


如果想要有更好的方案,那么我们就用许多模型组合在一起,强强联手,称之为集成模型。

这里我用随机森林,主要原理是构建多棵决策树,每棵决策树都会有一个结果,最后通过投票机制,选出最终结果。


from sklearn.ensemble import RandomForestClassifier
tree_param_grid = {'n_estimators':[10,20,30,50,80],
                   'min_samples_split':[2,8,10,20,30,50,60,70,80],
                    'min_samples_leaf':[2,5,10,20,30,50],
                   'random_state':[2]
                  }
grid = GridSearchCV(RandomForestClassifier(),param_grid=tree_param_grid,cv=5)
grid.fit(x_train_scaled,y_train)
best_model = grid.best_estimator_
acc1 = best_model.score(x_train_scaled,y_train)
acc2 = best_model.score(x_test_scaled,y_test)
print('随机森林模型训练准确率:{:2f}%'.format(acc1*100))
print('随机森林模型预测准确率:{:2f}%'.format(acc2*100))
print('随机森林模型最佳参数:{}'.format(grid.best_params_))


结果如下:


随机森林模型训练准确率:76.559140%
随机森林模型预测准确率:78.111588%
随机森林模型最佳参数:{'min_samples_leaf': 2, 'min_samples_split': 70, 'n_estimators': 50, 'random_state': 2}


新模型在预测集上达到了78.11%的准确率,对比前面有了较大提升~如果我们有更优质的数据、尝试更多的集成模型,还能再有进步。


接下去只要把目标店铺代入模型就能知道店铺到底好不好了,你的压岁钱保不保得住我就不知道了 ,但一定会得到最优利用。



如果对这方面感兴趣,送出相关的免费直播课程,内容有干货但是也不会太深奥,同时附赠免费答疑福利:



 Part.1 

 

免费直播课


直播主题:深度学习算法从理论到实践的应聘指南

<2月19日 周二 20:00>


直播大纲:

1.计算机视觉深度学习算法体系

2.教你选择适合的学习路线

3.技术细节讲解,以fasterrcnn为例

4.AI计算机视觉岗位招聘攻略


 Part.2 

 

《7天入门计算机视觉》免费课程


Day1 安装python环境

Day2 Python语言入门(一)

Day3 Python语言入门(一)

Day4 OpenCV图像处理(一)

Day5 OpenCV图像处理(二)

Day7 神经网络算法

Day8 猫狗分类演练


 Part.3 

文中数据和代码

更有数种不同模型对比代码



 Part.4 


7.6 G不可错过的AI入行秘籍

1. 6G Python入门资料:AI学习的必备帮手

2. 120+篇最新最全的AI报告:遍布政府、证券、咨询、IT等相关行业

3. 6门行业权威亲自授课的在线免费课程:160+篇涉及深度学习、计算机视觉各方向的论文(中英兼备,既泛且精

4. 20+部从小白到高手都能获益的人工智能PDF资料:含人工智能和机器学习领域国际权威学者吴恩达手稿



 Part.5 

领取方式


扫码加入QQ群

群号:929246020


席位有限,先到先得~




“养码场”

现有技术人80000+

覆盖JAVA/PHP/IOS/测试等领域

80%级别在P6及以上,含P9技术大咖30人

技术总监CTO 500余人


点击【阅读原文】,领取福利!


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/l4SIM8ZNmF
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/28926
 
586 次点击