一、数据处理
继之前的任务, 这里通过用图表的形式判断并将各个属性的离群点舍去.
发现 PERM 属性出现下图分布

1 2 3 4 5 6
| del_index = [] for col in range(len(data_test[2])): if data_test[2][col] > 2.5: del_index.append(col) data_test = np.delete(data_test, del_index, axis = 1) label = np.delete(label, del_index)
|
对于 PERM 属性舍去大于 2.5 的样本
同理对剩余属性进行处理

1 2 3 4 5 6
| del_index = [] for col in range(len(data_test[8])): if data_test[8][col] > 200: del_index.append(col) data_test = np.delete(data_test, del_index, axis = 1) label = np.delete(label, del_index)
|
对于 RT 属性舍去大于 200 的样本

1 2 3 4 5 6
| del_index = [] for col in range(len(data_test[10])): if data_test[10][col] > 20: del_index.append(col) data_test = np.delete(data_test, del_index, axis = 1) label = np.delete(label, del_index)
|
对于 C2 属性舍去大于 20 的样本
以此类推对所有属性进行处理. 但是我在这里有个想法,
为什么不对每类的属性进行处理呢?看起来有点故意为之的感觉,
实在不行再考虑这样处理吧.
二、算法测试
在使用一般的分类算法之前,
这里了解到还可以通过随机森林算法进行分类.
1 2 3 4 5 6 7
| from sklearn.ensemble import RandomForestClassifier
sklearn_rf_clf = RandomForestClassifier()
sklearn_rf_clf.fit(feature_train_set,label_train_set)
sklearn_rf_clf.score(feature_test_set,label_test_set)
|
运行截图

随机森林进行交叉验证
1 2 3 4 5
| from sklearn.model_selection import cross_val_score
score = cross_val_score(sklearn_rf_clf,feature_train_set, label_train_set, cv=3,n_jobs=1) print("CV accuacy score:%s" % score) print("CV accuacy mean score:%.3f" % np.mean(score))
|
运行截图

这里可以看见识别率比之前使用过的算法有所提升.
但是数据处理之后对识别率提升没有很明显变化, 以 100 次 KNN
平均识别率为例.
1 2 3 4 5 6 7 8 9 10 11 12
| from sklearn.neighbors import KNeighborsClassifier
sklearn_knn_clf = KNeighborsClassifier(n_neighbors=7)
sklearn_knn_clf.fit(feature_train_set,label_train_set)
score = 0
for i in range(100): score += sklearn_knn_clf.score(feature_test_set,label_test_set)
print(score/100)
|
数据处理前进行 100 次 KNN 的平均识别率

数据处理后进行 100 次 KNN 的平均识别率

很奇怪的是, 处理数据后识别率反而下降了. 看来相比起处理数据,
算法才是主导. 或许也只是自己的数据处理有问题.
看一下样本不同分类的个数, 观察是不是出现了分布不均.
1 2 3 4 5
| import numpy as np
for i in range(3): print('label = ',i) print(np.sum(label==i))
|
运行截图

看样子没有分布不均. 但是相比那些数据集, 这个数据集的大小就小得多了.
是否可以考虑对训练集和测试集的划分进行修改?这点不用担心,
库中的函数考虑到了这个问题, 它是分别对每类用固定比例进行划分.
三、总结
只剩下神经网络没有使用, 或者还有其他的算法.
还是更想对数据分析更透彻一些. 为了结果而做一些工作虽然看起来很不错,
但自己总感觉是 “为赋新词强说愁”.
看一些博客了解到相关性这个东西, 说不定会对分类有所效果.