Остання активність 1 month ago

Ade9 ревизій цього gist 1 month ago. До ревизії

1 file changed, 2 insertions, 2 deletions

hambuger_case.java

@@ -259,9 +259,9 @@ public class KMeans {
259 259 _ _ __________ ____ _
260 260 for (int i = 0; i < dataPoints.size(); i++) {
261 261 _ _ __________ ____ _
262 - ______ ___ _______ ____ _____ _ _______ __ _______ ________ ___ _
262 + ______ ___ _______ _ ________ ___ _
263 263 System.out.println("Data point " + (i + 1) + " belongs to cluster " + (clusters.get(i) + 1));
264 - ______ ___ _______ ____ _____ _ _______ __ _______ ________ ___ _
264 + ______ ___ _______ _ ________ ___ _
265 265 }
266 266 }
267 267 }

Ade9 ревизій цього gist 1 month ago. До ревизії

1 file changed, 267 insertions

hambuger_case.java(файл створено)

@@ -0,0 +1,267 @@
1 + ____ ____ _________
2 + import java.util.ArrayList;
3 + ____ ____ _________
4 + ____ ____ ____
5 + import java.util.List;
6 + ____ ____ ____
7 + ____ ____ ______
8 + import java.util.Random;
9 + ____ ____ ______
10 + ______
11 + public class KMeans {
12 + ______
13 + _
14 + private static int k;
15 + _
16 + _____________
17 + private static int maxIterations;
18 + _____________
19 + ____ ______ _________
20 + private static List<Double[]> centroids;
21 + ____ ______ _________
22 + ____ _______ ______ ____ ______ __________ _ _____________
23 + public static List<Integer> kMeans(List<Double[]> dataPoints, int k, int maxIterations) {
24 + ____ _______ ______ ____ ______ __________ _ _____________
25 + ______ _ _
26 + KMeans.k = k;
27 + ______ _ _
28 + ______ _____________ _____________
29 + KMeans.maxIterations = maxIterations;
30 + ______ _____________ _____________
31 + _________ _________
32 + centroids = new ArrayList<>();
33 + _________ _________
34 + _________ ___________________ __________
35 + centroids = initializeCentroids(dataPoints);
36 + _________ ___________________ __________
37 + ____ _______ __________________ _________
38 + List<Integer> clusterAssignments = new ArrayList<>();
39 + ____ _______ __________________ _________
40 + _ _ _ _____________ _
41 + for (int i = 0; i < maxIterations; i++) {
42 + _ _ _ _____________ _
43 + __________________ ______________ __________
44 + clusterAssignments = assignClusters(dataPoints);
45 + __________________ ______________ __________
46 + ____ ______ ____________ _______________ __________ __________________
47 + List<Double[]> newCentroids = updateCentroids(dataPoints, clusterAssignments);
48 + ____ ______ ____________ _______________ __________ __________________
49 + _________ ____________
50 + if (converged(newCentroids)) {
51 + _________ ____________
52 + break;
53 + }
54 + _________ ____________
55 + centroids = newCentroids;
56 + _________ ____________
57 + }
58 + __________________
59 + return clusterAssignments;
60 + __________________
61 + }
62 + ____ ______ ___________________ ____ __________
63 + private static List<Double[]> initializeCentroids(List<Double[]> dataPoints) {
64 + ____ ______ ___________________ ____ __________
65 + ____ ______ _________ _________
66 + List<Double[]> centroids = new ArrayList<>();
67 + ____ ______ _________ _________
68 + ______ ______ ______
69 + Random random = new Random();
70 + ______ ______ ______
71 + _ _ _ _
72 + for (int i = 0; i < k; i++) {
73 + _ _ _ _
74 + _____ ______ _______ __________ ____
75 + int index = random.nextInt(dataPoints.size());
76 + _____ ______ _______ __________ ____
77 + _________ ___ __________ ___ _____ _____
78 + centroids.add(dataPoints.get(index).clone());
79 + _________ ___ __________ ___ _____ _____
80 + }
81 + _________
82 + return centroids;
83 + _________
84 + }
85 + ____ _______ ______________ ____ ______ __________
86 + private static List<Integer> assignClusters(List<Double[]> dataPoints) {
87 + ____ _______ ______________ ____ ______ __________
88 + ____ _______ __________________ _________
89 + List<Integer> clusterAssignments = new ArrayList<>();
90 + ____ _______ __________________ _________
91 + ______ _____ __________
92 + for (Double[] point : dataPoints) {
93 + ______ _____ __________
94 + ______ ___________ ______ _________
95 + Double minDistance = Double.MAX_VALUE;
96 + ______ ___________ ______ _________
97 + _______ _
98 + int cluster = 0;
99 + _______ _
100 + _ _ _________ ____ _
101 + for (int i = 0; i < centroids.size(); i++) {
102 + _ _ _________ ____ _
103 + ______ ________ _________________ _____ _________ ___ _
104 + Double distance = calculateDistance(point, centroids.get(i));
105 + ______ ________ _________________ _____ _________ ___ _
106 + ________ ___________
107 + if (distance < minDistance) {
108 + ________ ___________
109 + ___________ ________
110 + minDistance = distance;
111 + ___________ ________
112 + _______ _
113 + cluster = i;
114 + _______ _
115 + }
116 + }
117 + __________________ ___ _______
118 + clusterAssignments.add(cluster);
119 + __________________ ___ _______
120 + }
121 + __________________
122 + return clusterAssignments;
123 + __________________
124 + }
125 + ______ _________________ ______ ______
126 + private static Double calculateDistance(Double[] point1, Double[] point2) {
127 + ______ _________________ ______ ______
128 + ______ ________ _ _
129 + Double distance = 0.0;
130 + ______ ________ _ _
131 + _ _ ______ ______ _
132 + for (int i = 0; i < point1.length; i++) {
133 + _ _ ______ ______ _
134 + ________ ____ ___ ______ _ ______ _
135 + distance += Math.pow(point1[i] - point2[i], 2);
136 + ________ ____ ___ ______ _ ______ _
137 + }
138 + ____ ____ ________
139 + return Math.sqrt(distance);
140 + ____ ____ ________
141 + }
142 + ____ ______ _______________ ____ ______ __________ ____ _______ __________________
143 + private static List<Double[]> updateCentroids(List<Double[]> dataPoints, List<Integer> clusterAssignments) {
144 + ____ ______ _______________ ____ ______ __________ ____ _______ __________________
145 + ____ ______ ____________ _________
146 + List<Double[]> newCentroids = new ArrayList<>();
147 + ____ ______ ____________ _________
148 + __________ __________ ___ ______
149 + int dimensions = dataPoints.get(0).length;
150 + __________ __________ ___ ______
151 + _ _ _ _
152 + for (int i = 0; i < k; i++) {
153 + _ _ _ _
154 + ____ ______ _______________ _________
155 + List<Double[]> pointsInCluster = new ArrayList<>();
156 + ____ ______ _______________ _________
157 + _ _ __________ ____ _
158 + for (int j = 0; j < dataPoints.size(); j++) {
159 + _ _ __________ ____ _
160 + __________________ ___ _ _
161 + if (clusterAssignments.get(j) == i) {
162 + __________________ ___ _ _
163 + _______________ ___ __________ ___ _
164 + pointsInCluster.add(dataPoints.get(j));
165 + _______________ ___ __________ ___ _
166 + }
167 + }
168 + _______________ _______
169 + if (pointsInCluster.isEmpty()) {
170 + _______________ _______
171 + ____________ ___ ______ __________
172 + newCentroids.add(new Double[dimensions]);
173 + ____________ ___ ______ __________
174 + continue;
175 + }
176 + ______ ___________ ______ __________
177 + Double[] newCentroid = new Double[dimensions];
178 + ______ ___________ ______ __________
179 + _ _ __________ _
180 + for (int d = 0; d < dimensions; d++) {
181 + _ _ __________ _
182 + ___
183 + double sum = 0.0;
184 + ___
185 + ______ _____ _______________
186 + for (Double[] point : pointsInCluster) {
187 + ______ _____ _______________
188 + ___ _____ _
189 + sum += point[d];
190 + ___ _____ _
191 + }
192 + ___________ _ ___ _______________ ____
193 + newCentroid[d] = sum / pointsInCluster.size();
194 + ___________ _ ___ _______________ ____
195 + }
196 + ____________ ___ ___________
197 + newCentroids.add(newCentroid);
198 + ____________ ___ ___________
199 + }
200 + ____________
201 + return newCentroids;
202 + ____________
203 +
204 + }
205 + _________ ____ ____________
206 + private static boolean converged(List<Double[]> newCentroids) {
207 + _________ ____ ____________
208 + _ _ _________ ____ _
209 + for (int i = 0; i < centroids.size(); i++) {
210 + _ _ _________ ____ _
211 + _________ ___ _ ______ ____________ ___ _
212 + if (!centroids.get(i).equals(newCentroids.get(i))) {
213 + _________ ___ _ ______ ____________ ___ _
214 +
215 + return false;
216 + }
217 + }
218 + return true;
219 + }
220 + ____ ______ ____
221 + public static void main(String[] args) {
222 + ____ ______ ____
223 + ____ ______ __________ _________
224 + List<Double[]> dataPoints = new ArrayList<>();
225 + ____ ______ __________ _________
226 + __________ ___ ______
227 + dataPoints.add(new Double[]{1.0, 2.0});
228 + __________ ___ ______
229 + __________ ___ ______
230 + dataPoints.add(new Double[]{1.5, 1.8});
231 + __________ ___ ______
232 + __________ ___ ______
233 + dataPoints.add(new Double[]{5.0, 8.0});
234 + __________ ___ ______
235 + __________ ___ ______
236 + dataPoints.add(new Double[]{8.0, 8.0});
237 + __________ ___ ______
238 + __________ ___ ______
239 + dataPoints.add(new Double[]{1.0, 0.6});
240 + __________ ___ ______
241 + __________ ___ ______
242 + dataPoints.add(new Double[]{9.0, 11.0});
243 + __________ ___ ______
244 + _
245 + int k = 2;
246 + _
247 + _____________
248 + int maxIterations = 100;
249 + _____________
250 +
251 +
252 +
253 + ____ _______ ________ ______ __________ _ _____________
254 + List<Integer> clusters = kMeans(dataPoints, k, maxIterations);
255 + ____ _______ ________ ______ __________ _ _____________
256 +
257 +
258 +
259 + _ _ __________ ____ _
260 + for (int i = 0; i < dataPoints.size(); i++) {
261 + _ _ __________ ____ _
262 + ______ ___ _______ ____ _____ _ _______ __ _______ ________ ___ _
263 + System.out.println("Data point " + (i + 1) + " belongs to cluster " + (clusters.get(i) + 1));
264 + ______ ___ _______ ____ _____ _ _______ __ _______ ________ ___ _
265 + }
266 + }
267 + }
Новіше Пізніше