最近发现我学习机器学习的顺序不太对劲,之前先学了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 | #DecisionTree |
1 | #RandomForest |
其中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';
总得来说这些分类器各有优点。因为一些原因暂时就不放上完整的结果和数据集了。