本次比赛主要是一个对进出口交易记录数据进行产品判别的任务。本次任务有 19046 条数据记录,其中的 18279 条记录是有类别属性的,可做为分析时的训练样本,而任务目标是对 767 条测试数据(即验证样本)进行判别(本实验采用其中的20个样本)。python
已分类的训练样本提供在比赛题目下 Excel 附件中的 cck_train 表中,训练样本的详情以下,其中,表格中的每条记录包含 7 个字段。
未分类的验证样本提供在比赛题目下 Excel 附件中的 cck_test 表中。验证样本的信息以下,表格中的每条记录包含 5 个已知属性字段,其中表中属性内容与 cck_表 略有不一样,具体属性字段的含义请参考下节描述。函数
本次任务提供的样本数据包含 7 个基础属性字段,其中有 2 个连续型数值类属性字段为:Quality and Price,5 个离散型数值类属性字段为:Enterprise(560)、Destination(144)、Origin(131)、Custom(20)、Product(364)。各字段具体含义以下:
Quality:表示每条交易记录中交易产品的数量,可忽略单位。
Price:表示每条交易记录中交易产品的平均价格,单位为元。
Enterprise(560):表示每条交易记录中交易产品的供应商编码。
Destination(144):表示每条交易记录中交易产品的买方国家编码。
Origin(131): 表示每条交易记录中交易产品的原产地编码。
Custom(20): 表示每条交易记录中交易产品通关海关编码。
Product(364): 表示每条交易记录中交易产品的名称类别。
在验证样本中的字段 Product1 ,Product2 ,Product3 为参赛者进行分类预测后几率由大到小排名
前 3 名的产品类别,字段编码同 Product 字段。工具
不管是在训练样本仍是验证样本中,咱们能够看到,一条交易记录数据包括 Enterprise(560)、
Destination(144)、Origin(131)、Custom(20)、Product(364)5 个基本属性字段,括
号内为每一个属性下包含的全部特征值个数,而这些属性将是咱们学习训练样本获得分类模型的关
键,根据一条交易记录的每一个属性的特征值的出现状况,利用模型对验证样本的交易产品类别进
行分类预测。学习
在整个验证样本预测结果中,参赛者在第 i 条记录的产品类别预测值与实际类别彻底一致时可得
10 分,即预测结果字段 Product1 为实际产品类别。产品类别预测值与实际类别不一致时,其中
若是预测结果 Product2 为实际产品类别的,参赛者在该条验证样本可得 2 分;若是预测结果
Product3 为实际产品类别的,该条验证样本可得 1 分,对整个 767 条验证样本预测结果加总得
到一个总分 S:(本实验采用期中的20个样本)。
取 F=S/P*100%
(其中 P 为全部验证样本类别预测结果均与实际结果相一致的总成绩,即 P=7670)为每位参与者的模型评价得分,各位参与者模型得分由高到低依次排列。测试
在处理数据时遇到了些麻烦,使用LabelEncoder对字符型数据进行了编码转换得以解决。经过对DataFrame的操做,最终实现了数据的处理,并将预测的产品类别保存在了excel表格中。
使用sklearn的KNeighborsClassifier()函数进行knn预测。编码
结果却出现了类型转换错误:
解决方案:LabelEncoder 用 0 到 n_classes-1 之间的值对标签进行编码
使用代码:spa
for col in X_test.columns.values: if X_test [ col ] .dtypes=='object': le.fit(X_test[col]) X_test[col]=le.transform(X_test[col])
报错:
经测试,Enterprise被识别成float,但事实上数据中夹杂着ABPE等字符
因而进行了类型转换处理
编码后的数据效果以下图:
最终得出预测结果:
导入给定的测试样本,并对前20个数据进行预测判断Product3d