【发布时间】:2017-09-07 19:19:40
【问题描述】:
背景
我们需要根据商品的描述数据,将客户的订单分成一定(未知)数量的组。每个项目的描述数据由几个关键词(不是句子)组成。以下是一些示例数据(每个项目一行)。
样本数据
1. WIRE,MAGNET;SOLID;Cu;;Ø0.300mm/32AWG;;;UNCOLORED;CLASS 155;SINGLE BUILD;GRADE 1;
2. WIRE,MAGNET;SOLID;Cu;;Ø0.400mm/32AWG;;;UNCOLORED;CLASS 155;SINGLE BUILD;GRADE 1;
3. WIRE,MAGNET;SOLID;Cu;;Ø0.200mm/32AWG;;;UNCOLORED;CLASS 155;SINGLE BUILD;GRADE 1;
4. WIRE,MAGNET;SOLID;Cu;;Ø0.200mm/32AWG;;;UNCOLORED;CLASS 155;HEAVY BUILD;GRADE 2;
5. CAP;CERAMIC;;3.3nF;10%;50V;X7R;0805;;;-55to+125°C;
6. CAP;CERAMIC;;330nF;10%;50V;X7R;0805;;;-55to+125°C;
7. CAP;CERAMIC;;4.7µF;10%;16V;X7R;0805;;;-55to+125°C;
8. CAP;CERAMIC;;100pF;10%;1kV;X7R;1206;;;-55to+125°C;
9. CAP;CERAMIC;;47µF;10%;16V;X5R;1210;;;-55to+85°C;
10. CAP;CERAMIC;;22µF;10%;25V;X5R;1210;;;-55to+85°C;
11. CAP;CERAMIC;;4.7µF;10%;50V;X7R;1210;;;-55to+125°C;
12. MOSFET;N;ENH;200V;18A;0.18 Ohm;TO220;;
13. MOSFET;N;ENH;1.2kV;3A;4.5 Ohm;TO263;;
14. MOSFET;N;ENH;1.2kV;3A;4.7 Ohm;TO220;;
我们做了什么
数据量可能有数百万,因此我们在 spark 上使用 mllib API 进行了尝试以下步骤,
- 做一些预处理工作(即用标点符号分割字符串并删除一些停用词)。
- 使用 mllib 中的 HashingTF/IDF 为每个描述数据计算 tf-idf。
- 使用 K-Means 算法使用步骤 2 中的 tf-idf 数据训练模型并进行预测。
这给出了初始聚类结果,正如预期的那样,1-4、5-11、12-14 分别被分为三个集群,这是有希望的。
问题
如果客户要求具有不同 GRADE 的项目不应组合在一起。例如,数据 #4 应该不与数据 #1、#2 和 #3 组合在一起,因为 #4 具有 GRADE 2 而其他人拥有GRADE 1。
1. WIRE,MAGNET;SOLID;Cu;;Ø0.300mm/32AWG;;;UNCOLORED;CLASS 155;SINGLE BUILD;***GRADE 1***;
2. WIRE,MAGNET;SOLID;Cu;;Ø0.400mm/32AWG;;;UNCOLORED;CLASS 155;SINGLE BUILD;***GRADE 1***;
3. WIRE,MAGNET;SOLID;Cu;;Ø0.200mm/32AWG;;;UNCOLORED;CLASS 155;SINGLE BUILD;***GRADE 1***;
4. WIRE,MAGNET;SOLID;Cu;;Ø0.200mm/32AWG;;;UNCOLORED;CLASS 155;HEAVY BUILD;***GRADE 2***;
如何做到这一点?
【问题讨论】:
标签: apache-spark machine-learning k-means apache-spark-mllib