几种不同分类器对同一数据集的分类实现

最近发现我学习机器学习的顺序不太对劲,之前先学了CNN和各种深度学习框架然后才开始看一些正常的分类器。。。不过话说回来,这样顺序导致我现在看这些分类器原理和实现轻松多了。

对同一数据集实验了SVM,DecisionTree,RandomForest以及BP神经网络的效果。
前三者使用了Python的sklearn包,写起来非常简单和套模板差不多,BP神经网络用MATLAB实现。
数据格式如下:
p1 p2 p3 p4 p5 p6 lable
其中lable有三类。
以下是代码:

1
2
3
4
5
6
7
8
9
10
#SVM
from sklearn import SVM
import numpy as np
data = np.loadtxt('./data.txt', dtype=float, delimiter=' ')
x, y = np.split(data, (6,), axis=1)

clf = svm.SVC()
clf.fit(x, y.ravel())

y_predict = clf.predict(x)

1
2
3
4
5
6
7
8
9
10
11
#DecisionTree
from sklearn import tree
import numpy as np

data = np.loadtxt('./data.txt', dtype=float, delimiter=' ')
x, y = np.split(data, (6,), axis=1)

clf = tree.DecisionTreeClassifier()
clf.fit(x, y.ravel())

y_predict = clf.predict(x)
1
2
3
4
5
6
7
8
9
10
11
#RandomForest
from sklearn import ensemble
import numpy as np

data = np.loadtxt('./data.txt', dtype=float, delimiter=',')
x, y = np.split(data, (6,), axis=1)

clf = ensemble.RandomForestClassifier()
clf.fit(x, y.ravel())

y_predict = clf.predict(x)

其中svm.SVC(),tree.DecisionTreeClassifier()以及ensemble.RandomForestClassifier()这三个函数可以调整参数,不过在这个数据集上效果不如默认的参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
%% BPNN
clear all
data = load('./data.txt');
[input, minI, maxI] = premnmx([data(:, 1), data(:, 2), data(:, 3), data(:, 4), data(:, 5), data(:, 6)]');

output = zeros(length(data(:, 7)), 3);
for i = 1:length(data(:, 7))
output(i, data(i, 7)) = 1;
end

net = newff(input, output', 20);
net = train(net, input, output');

testInput = tramnmx([data(:, 1), data(:, 2), data(:, 3), data(:, 4), data(:, 5), data(:, 6)]', minI, maxI);

Y = sim(net, testInput);

for i = 1:max(size(Y))
[m, Index] = max(Y(:, i));
result(i) = Index;
end
result = result';

总得来说这些分类器各有优点。因为一些原因暂时就不放上完整的结果和数据集了。

坚持原创技术分享,您的支持将鼓励我继续创作!