forked from kevin-keraudren/randomforest-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample_sklearn_classification.py
More file actions
75 lines (58 loc) · 2.38 KB
/
example_sklearn_classification.py
File metadata and controls
75 lines (58 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/python
import numpy as np
import cv2 # OpenCV
import itertools
from randomforest import weakLearner
from randomforest.weakLearner import FeatureExtractor
from sklearn import ensemble
def img_test(forest, feature_extractor, points, colors, filename, size=512,
radius=3, proba=True):
img = np.zeros((size, size, 3))
v_min = points.min()
v_max = points.max()
step = float(v_max - v_min) / img.shape[0]
grid = np.arange(v_min, v_max, step)
xy = np.array(list(itertools.product(grid, grid)))
features = feature_extractor.apply_all(xy)
if proba:
r = forest.predict_proba(features)
col = np.dot(r, colors)
else:
r = forest.predict(features).astype('int32')
col = colors[r]
img[((xy[:, 1] - v_min) / step).astype('int32'),
((xy[:, 0] - v_min) / step).astype('int32')] = col
points = ((points - v_min) / step).astype('int')
for p, r in zip(points, responses):
col = tuple(colors[int(r)])
cv2.circle(img, tuple(p), radius + 1, (0, 0, 0), thickness=-1)
cv2.circle(img, tuple(p), radius, col, thickness=-1)
cv2.imwrite(filename, img)
t = np.arange(0, 10, 0.1)
theta = [0, 30, 60]
colors = np.array([[255, 0, 0],
[0, 255, 0],
[0, 0, 255]], dtype='float')
points = np.zeros((len(t) * len(theta), 2))
responses = np.zeros(len(t) * len(theta))
for c in range(len(theta)):
points[c * len(t):(c + 1) * len(t), 0] = t ** 2 * np.cos(t + theta[c]) # x
points[c * len(t):(c + 1) * len(t), 1] = t ** 2 * np.sin(t + theta[c]) # y
responses[c * len(t):(c + 1) * len(t)] = c
for learner in weakLearner.__all__:
test_class = getattr(weakLearner, learner)()
params = {'max_depth': None,
'min_samples_split': 2,
'n_jobs': 1,
'n_estimators': 100}
print(str(learner))
forest = ensemble.RandomForestClassifier(**params)
feature_extractor = FeatureExtractor(test_class, n_features=1000)
features = feature_extractor.fit_transform(points)
forest.fit(features, responses)
img_test(forest, feature_extractor, points, colors,
'img/classification_forest_sklearn_' + str(learner) + '_soft.png',
proba=True)
img_test(forest, feature_extractor, points, colors,
'img/classification_forest_sklearn_' + str(learner) + '_hard.png',
proba=False)