首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

利用 Python、SciKit 和文本分类来实现行为分析(3)效果评估

利用 Python、SciKit 和文本分类来实现行为分析(3)效果评估

评估行为描述模型首先使用 Linear Support Vector Machine (SVM),对于此类稀疏矢量问题,这是一个匹配度很高的不错的模型。使用代码                    linear_svm_classifier = SVC(kernel="linear", C=0.025)。
备注:您可以通过修改这个模式初始化代码来切换到其他模型类型。如果需要试用不同的模型类型,那么可以使用这个分类器映射,它为一些常见的选项设置了初始化。
清单 6. 使用分类器的映射
1
2
3
4
5
6
7
8
9
10
11
12
classifier_map = dict()
classifier_map["Nearest Neighbors"]=KNeighborsClassifier(3)
classifier_map["Linear SVM"]=SVC(kernel="linear", C=0.025)
classifier_map["RBF SVM"]= SVC(gamma=2, C=1)
classifier_map["Decision Tree"]=DecisionTreeClassifier(max
    _depth=5)
classifier_map["Random Forest"]=RandomForestClassifier
    (max_depth=5, n_estimators=10, max_features=1)
classifier_map["AdaBoost"]=AdaBoostClassifier()
classifier_map["Naive Bayes"]=GaussianNB()
classifier_map["LDA"]=LDA()
classifier_map["QDA"]=QDA()




因为这是一个多级分类问题(也就是说,在该问题中,您需要选择的可能类别多于两个),您还需要指定相应的策略。一种常见的方法是执行一对全的分类。例如,来自                goth 类的产品描述被用于定义一个类,而另一个类包括来自其他所有类(                metal、rave,等等)的示例描述。最后,作为验证的一部分,您需要确保修整该模型的数据不是测试数据。一个常见的技术是使用交叉折叠验证法。您可以使用此技术五次,这意味着穿过数据的五个部分的分区五次。在每次穿过时,五分之四的数据被用于修整,其余五分之一用于测试。
清单 7. 交叉折叠验证
1
2
3
4
scores = cross_validation.cross_val_score(OneVsRestClassifier
    (linear_svm_classifier), X_data, y_target, cv=2)
print("Accuracy using %s:%0.2f (+/- %0.2f) and %d folds"
    % ("Linear SVM", scores.mean(), scores.std() * 2, 5))




尽管如此,您仍会得到完全精确的结果,这标志着模拟数据有点过于完美。当然,在现实生活中,始终会有干扰因素,因为群体之间的完美界限并不总是存在。例如,有 goth punk                的问题流派,所以像 Crimson Scarlet 这样的乐队可能会同时进入 goth 和 punk                的训练示例。您可以试一下  中的种子数据,以便更好地了解这种类型的干扰因素。
在了解一个行为描述模型之后,您可以再绕回来,用您的所有数据修整它。
清单 8. 修整行为描述模型
1
2
behavioral_profiler = SVC(kernel="linear", C=0.025)
behavioral_profiler.fit(X_data, y_target)




试用行为模型现在,您可以玩一下模型,键入一些虚构的产品描述,看看模型如何工作。
清单 9. 试用模型
1
2
print behavioral_profiler.predict(vectorizer.transform(['Some black
Bauhaus shoes to go with your Joy Division hand bag']).toarray()[0])




请注意,它的确会返回 ['goth']。如果删除单词 Bauhaus 并重新运行,您可能会注意到,它现在会返回                    ['punk']。
对您的客户应用行为模型继续将修整过的模型应用于客户及其购买的产品描述。
清单 10. 将修整过的模型应用于我们的客户及其产品描述
1
2
3
4
5
6
7
8
9
10
11
predicted_profiles=[ ]
ground_truth=[ ]
for c in customers:
    customer_prod_descs = ' '.join(p.description for p in
c.product_descriptions)
    predicted =   behavioral_profiler.predict(vectorizer
.transform([customer_product_descriptions]).toarray()[0])
    predicted_profiles.append(predicted[0])
    ground_truth.append(c.type)
    print "Customer %d, known to be %s, was predicted to
be %s" % (c.id,c.type,predicted[0])




最后,计算准确性,看看您可以多频繁地分析购物者。
清单 11. 计算准确性
1
2
3
a=[x1==y1 for x1, y1 in zip(predicted_profiles,ground_truth)]
accuracy=float(sum(a))/len(a)
print "Percent Profiled Correctly %.2f" % accuracy




如果使用所提供的默认描述数据,结果应该是 95%。如果这是真实的数据,那么这是一个相当不错的准确率。
扩展模型现在,我们已经构建和测试了模型,可以把它应用于数以百万计的客户个人资料。您可以使用 MapReduce                框架,并将修整后的行为分析器发送到工作节点。然后,每个工作节点都会得到一批客户个人资料及其购买历史,并应用模型。保存结果。此时,模型已被应用,您的客户被分配为一个行为描述。您可以在很多方面使用该行为描述分配任务。例如,您可能决定用定制的促销活动来定位目标客户,或者使用行为描述作为产品推荐系统的输入。
返回列表