回答編集履歴

2

追記

2020/05/04 10:03

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -15,3 +15,75 @@
15
15
 
16
16
 
17
17
  ロジックを見直せるならそれが一番いいです。
18
+
19
+
20
+
21
+
22
+
23
+ # 追記
24
+
25
+ スレッド並列化のテスト。
26
+
27
+
28
+
29
+ ```python
30
+
31
+ import time
32
+
33
+ import numpy as np
34
+
35
+ from concurrent.futures import ThreadPoolExecutor
36
+
37
+ from sklearn.neighbors import KNeighborsClassifier
38
+
39
+
40
+
41
+ X = np.random.normal(size=(16*10*3, 4*10**1))
42
+
43
+ y = np.random.normal(size=(16*10*3, )) > 0
44
+
45
+
46
+
47
+ def f():
48
+
49
+ model = KNeighborsClassifier(n_neighbors=30, weights='distance', algorithm='auto', leaf_size=30, n_jobs=-1)
50
+
51
+ model.fit(X, y)
52
+
53
+ model.predict(X[0:1])
54
+
55
+
56
+
57
+ t1 = time.time()
58
+
59
+ for _ in range(10**2):
60
+
61
+ f()
62
+
63
+ t2 = time.time()
64
+
65
+ print(t2 - t1) # 11.042834997177124
66
+
67
+
68
+
69
+ t1 = time.time()
70
+
71
+ with ThreadPoolExecutor() as executor:
72
+
73
+ res = [executor.submit(f) for _ in range(10**2)]
74
+
75
+ for f in res:
76
+
77
+ f.result()
78
+
79
+ t2 = time.time()
80
+
81
+ print(t2 - t1) # 0.8094661235809326
82
+
83
+
84
+
85
+ ```
86
+
87
+
88
+
89
+ やっぱり待ち時間が長いので、スレッド並列は一つの答えかも。複数同時に回せるタスクがあるならですが。

1

編集

2020/05/04 10:03

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- 一度に大量のデータを流し込んで学習させれば並列性の低い部分がボトルネックになることは避けられますが、今回のような使い方では並列性の低い部分が足を引っ張り、スピードの出ようがありません。
9
+ 一度に大量のデータを流し込んで学習・予測させれば並列性の低い部分がボトルネックになることは避けられますが、今回のような使い方では並列性の低い部分が足を引っ張り、スピードの出ようがありません。
10
10
 
11
11
 
12
12