-
Notifications
You must be signed in to change notification settings - Fork 0
/
all the 10 programs
1408 lines (1408 loc) · 312 KB
/
all the 10 programs
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"cells": [
{
"cell_type": "markdown",
"id": "fe079724",
"metadata": {
"_cell_guid": "3aed06db-02cd-4aff-acc9-f58eabf51357",
"_uuid": "d52d87df-32f9-4353-8549-3e4c5842dd7f",
"papermill": {
"duration": 0.008015,
"end_time": "2024-07-22T17:34:12.554130",
"exception": false,
"start_time": "2024-07-22T17:34:12.546115",
"status": "completed"
},
"tags": []
},
"source": [
"1. Aim: Illustrate and Demonstrate the working model and principle of Find-S algorithm.\n",
"\n",
"\n",
"Program: For a given set of training data examples stored in a .CSV file, implement and demonstrate the Find-S algorithm to output a description of the set of all hypotheses consistent with the training examples."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "0fb1fc68",
"metadata": {
"_cell_guid": "dbb23af3-e628-438d-bb31-118bdd199fdd",
"_uuid": "6da8d3ab-65da-4c77-bb87-396209876197",
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-07-22T17:34:12.572187Z",
"iopub.status.busy": "2024-07-22T17:34:12.571066Z",
"iopub.status.idle": "2024-07-22T17:34:12.608037Z",
"shell.execute_reply": "2024-07-22T17:34:12.606450Z"
},
"jupyter": {
"outputs_hidden": false
},
"papermill": {
"duration": 0.049029,
"end_time": "2024-07-22T17:34:12.610851",
"exception": false,
"start_time": "2024-07-22T17:34:12.561822",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Sky AirTemp Humidity Wind Water Forecast EnjoySport']\n",
"['Sunny Warm Normal Strong Warm Same Yes']\n",
"['Sunny Warm High Strong Warm Same Yes']\n",
"['Rainy Cold High Strong Warm Change No']\n",
"['Sunny Warm High Strong Cool Change Yes']\n",
"Most specific hypothesis is\n",
"[['0', '0', '0', '0', '0', '0']]\n"
]
}
],
"source": [
"import csv\n",
"\n",
"# Open the CSV file\n",
"with open('/kaggle/input/tennis-csv/tennis.csv', 'r') as f:\n",
" reader = csv.reader(f)\n",
" your_list = list(reader)\n",
"\n",
"# Initialize the hypothesis\n",
"h = [['0', '0', '0', '0', '0', '0']]\n",
"\n",
"# Process each row in the dataset\n",
"for i in your_list:\n",
" print(i)\n",
" if i[-1] == \"True\":\n",
" j = 0\n",
" for x in i:\n",
" if x != \"True\":\n",
" if x != h[0][j] and h[0][j] == '0':\n",
" h[0][j] = x\n",
" elif x != h[0][j] and h[0][j] != '0':\n",
" h[0][j] = '?'\n",
" else:\n",
" pass\n",
" j += 1\n",
"\n",
"# Print the most specific hypothesis\n",
"print(\"Most specific hypothesis is\")\n",
"print(h)"
]
},
{
"cell_type": "markdown",
"id": "684c1c88",
"metadata": {
"papermill": {
"duration": 0.007302,
"end_time": "2024-07-22T17:34:12.626006",
"exception": false,
"start_time": "2024-07-22T17:34:12.618704",
"status": "completed"
},
"tags": []
},
"source": [
"2.Aim: Demonstrate the working model and principle of candidate elimination algorithm.\n",
"Program: For a given set of training data examples stored in a .CSV file, implement and demonstrate the Candidate-Elimination algorithm to output a description of the set of all hypotheses consistent with the training examples."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8c8598df",
"metadata": {
"execution": {
"iopub.execute_input": "2024-07-22T17:34:12.643490Z",
"iopub.status.busy": "2024-07-22T17:34:12.643066Z",
"iopub.status.idle": "2024-07-22T17:34:12.658202Z",
"shell.execute_reply": "2024-07-22T17:34:12.656750Z"
},
"papermill": {
"duration": 0.026669,
"end_time": "2024-07-22T17:34:12.660660",
"exception": false,
"start_time": "2024-07-22T17:34:12.633991",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Steps of Candidate Elimination Algorithm 1\n",
"[]\n",
"[]\n",
"Steps of Candidate Elimination Algorithm 2\n",
"[]\n",
"[]\n",
"Steps of Candidate Elimination Algorithm 3\n",
"[]\n",
"[]\n",
"Steps of Candidate Elimination Algorithm 4\n",
"[]\n",
"[]\n",
"Steps of Candidate Elimination Algorithm 5\n",
"[]\n",
"[]\n",
"\n",
"Final specific hypothesis:\n",
" []\n",
"\n",
"Final general hypothesis:\n",
" []\n"
]
}
],
"source": [
"import csv\n",
"\n",
"# Opens the CSV file \"tennis.csv\" and reads its contents\n",
"with open(\"/kaggle/input/tennis-csv/tennis.csv\") as f:\n",
" csv_file = csv.reader(f)\n",
" data = list(csv_file)\n",
"\n",
"# Initializes the specific hypothesis 's' and the general hypothesis 'gh'\n",
"s = ['?' for i in range(len(data[0])-1)]\n",
"gh = [['?' for i in range(len(s))] for j in range(len(s))]\n",
"\n",
"# Iterates through each data instance in 'data'\n",
"for instance in data:\n",
" # Checks if the last attribute of the instance is \"Yes\"\n",
" if instance[-1] == \"Yes\":\n",
" # Updates 's' and 'gh' based on positive instance\n",
" for j in range(len(s)):\n",
" if instance[j] != s[j] and s[j] == '?':\n",
" s[j] = instance[j]\n",
" elif instance[j] != s[j] and s[j] != '?':\n",
" s[j] = '?'\n",
" elif instance[-1] == \"No\":\n",
" # Updates 'gh' based on negative instance\n",
" for j in range(len(s)):\n",
" if instance[j] != s[j]:\n",
" gh[j][j] = s[j]\n",
" else:\n",
" gh[j][j] = '?'\n",
"\n",
" # Prints the steps of the Candidate Elimination Algorithm\n",
" print(\"Steps of Candidate Elimination Algorithm\", data.index(instance) + 1)\n",
" print(s)\n",
" print(gh)\n",
"\n",
" # Removes inconsistent hypotheses from 'gh'\n",
" g = []\n",
" for i in gh:\n",
" if i not in g:\n",
" g.append(i)\n",
"\n",
" # Ends the loop if 's' becomes the final hypothesis\n",
" if len(g) == 1:\n",
" break\n",
"\n",
"# Prints the final specific and general hypotheses\n",
"print(\"\\nFinal specific hypothesis:\\n\", s)\n",
"print(\"\\nFinal general hypothesis:\\n\", g)\n"
]
},
{
"cell_type": "markdown",
"id": "7d26f4c3",
"metadata": {
"papermill": {
"duration": 0.007348,
"end_time": "2024-07-22T17:34:12.675854",
"exception": false,
"start_time": "2024-07-22T17:34:12.668506",
"status": "completed"
},
"tags": []
},
"source": [
"3)Aim: To construct the Decision tree using the training data sets under supervised learning concept.\n",
"Program: Write a program to demonstrate the working of the decision tree based ID3 algorithm. Use an appropriate data set for building the decision tree and apply this knowledge to classify a new sample"
]
},
{
"cell_type": "markdown",
"id": "cd05cea7",
"metadata": {
"papermill": {
"duration": 0.007367,
"end_time": "2024-07-22T17:34:12.690833",
"exception": false,
"start_time": "2024-07-22T17:34:12.683466",
"status": "completed"
},
"tags": []
},
"source": [
"4)Aim: To understand the working principle of Artificial Neural network with feed forward and feed backward principle.\n",
"Program: Build an Artificial Neural Network by implementing the Backpropagation algorithm and test the same using appropriate data sets."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "ab41fcc9",
"metadata": {
"execution": {
"iopub.execute_input": "2024-07-22T17:34:12.708442Z",
"iopub.status.busy": "2024-07-22T17:34:12.707996Z",
"iopub.status.idle": "2024-07-22T17:34:13.636397Z",
"shell.execute_reply": "2024-07-22T17:34:13.635051Z"
},
"papermill": {
"duration": 0.940059,
"end_time": "2024-07-22T17:34:13.638793",
"exception": false,
"start_time": "2024-07-22T17:34:12.698734",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Constructed Decision Tree:\n",
"{'Outlook': {'Overcast': 'Yes', 'Rain': {'Wind': {'Strong': 'No', 'Weak': 'Yes'}}, 'Sunny': {'Humidity': {'High': 'No', 'Normal': 'Yes'}}}}\n",
"\n",
"Classification Result for the Sample:\n",
"No\n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from collections import Counter\n",
"# Defining the dataset\n",
"data = [\n",
" [\"Outlook\", \"Temperature\", \"Humidity\", \"Wind\", \"PlayTennis\"],\n",
" [\"Sunny\", \"Hot\", \"High\", \"Weak\", \"No\"],\n",
" [\"Sunny\", \"Hot\", \"High\", \"Strong\", \"No\"],\n",
" [\"Overcast\", \"Hot\", \"High\", \"Weak\", \"Yes\"],\n",
" [\"Rain\", \"Mild\", \"High\", \"Weak\", \"Yes\"],\n",
" [\"Rain\", \"Cool\", \"Normal\", \"Weak\", \"Yes\"],\n",
" [\"Rain\", \"Cool\", \"Normal\", \"Strong\", \"No\"],\n",
" [\"Overcast\", \"Cool\", \"Normal\", \"Strong\", \"Yes\"],\n",
" [\"Sunny\", \"Mild\", \"High\", \"Weak\", \"No\"],\n",
" [\"Sunny\", \"Cool\", \"Normal\", \"Weak\", \"Yes\"],\n",
" [\"Rain\", \"Mild\", \"Normal\", \"Weak\", \"Yes\"],\n",
" [\"Sunny\", \"Mild\", \"Normal\", \"Strong\", \"Yes\"],\n",
" [\"Overcast\", \"Mild\", \"High\", \"Strong\", \"Yes\"],\n",
" [\"Overcast\", \"Hot\", \"Normal\", \"Weak\", \"Yes\"],\n",
" [\"Rain\", \"Mild\", \"High\", \"Strong\", \"No\"]\n",
"]\n",
"\n",
"# Creating a DataFrame from the dataset\n",
"df = pd.DataFrame(data[1:], columns=data[0])\n",
"def entropy(target_col):\n",
" elements, counts = np.unique(target_col, return_counts=True)\n",
" entropy = np.sum([(-counts[i]/np.sum(counts)) * np.log2(counts[i]/np.sum(counts)) for i in range(len(elements))])\n",
" return entropy\n",
"def information_gain(data, split_attribute, target_attribute):\n",
" total_entropy = entropy(data[target_attribute])\n",
" values, counts = np.unique(data[split_attribute], return_counts=True)\n",
" weighted_entropy = np.sum([(counts[i]/np.sum(counts)) * entropy(data[data[split_attribute] == values[i]][target_attribute]) for i in range(len(values))])\n",
" information_gain = total_entropy - weighted_entropy\n",
" return information_gain\n",
"def ID3(data, original_data, features, target_attribute, parent_node_class=None):\n",
" if len(np.unique(data[target_attribute])) <= 1:\n",
" return np.unique(data[target_attribute])[0]\n",
" elif len(data) == 0:\n",
" return np.unique(original_data[target_attribute])[np.argmax(np.unique(original_data[target_attribute], return_counts=True)[1])]\n",
" elif len(features) == 0:\n",
" return parent_node_class\n",
" else:\n",
" parent_node_class = np.unique(data[target_attribute])[np.argmax(np.unique(data[target_attribute], return_counts=True)[1])]\n",
" item_values = [information_gain(data, feature, target_attribute) for feature in features]\n",
" best_feature_index = np.argmax(item_values)\n",
" best_feature = features[best_feature_index]\n",
" tree = {best_feature: {}}\n",
" features = [i for i in features if i != best_feature]\n",
" for value in np.unique(data[best_feature]):\n",
" value_sub_data = data[data[best_feature] == value]\n",
" subtree = ID3(value_sub_data, original_data, features, target_attribute, parent_node_class)\n",
" tree[best_feature][value] = subtree\n",
" return tree\n",
"def classify(sample, tree):\n",
" for attribute in list(sample.keys()):\n",
" if attribute in tree.keys():\n",
" try:\n",
" result = tree[attribute][sample[attribute]]\n",
" except:\n",
" return None\n",
" result = tree[attribute][sample[attribute]]\n",
" if isinstance(result, dict):\n",
" return classify(sample, result)\n",
" else:\n",
" return result\n",
"# List of features\n",
"features = list(df.columns[:-1])\n",
"\n",
"# Target attribute\n",
"target_attribute = df.columns[-1]\n",
"\n",
"# Constructing the decision tree\n",
"decision_tree = ID3(df, df, features, target_attribute)\n",
"\n",
"# Sample to classify\n",
"sample = {\n",
" \"Outlook\": \"Sunny\",\n",
" \"Temperature\": \"Cool\",\n",
" \"Humidity\": \"High\",\n",
" \"Wind\": \"Strong\"\n",
"}\n",
"\n",
"# Classifying the sample\n",
"classification_result = classify(sample, decision_tree)\n",
"\n",
"print(\"Constructed Decision Tree:\")\n",
"print(decision_tree)\n",
"\n",
"print(\"\\nClassification Result for the Sample:\")\n",
"print(classification_result)\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "4941a8c8",
"metadata": {
"execution": {
"iopub.execute_input": "2024-07-22T17:34:13.657034Z",
"iopub.status.busy": "2024-07-22T17:34:13.656079Z",
"iopub.status.idle": "2024-07-22T17:34:18.364943Z",
"shell.execute_reply": "2024-07-22T17:34:18.363555Z"
},
"papermill": {
"duration": 4.72097,
"end_time": "2024-07-22T17:34:18.367553",
"exception": false,
"start_time": "2024-07-22T17:34:13.646583",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 0, Loss: 0.3037\n",
"Epoch: 1000, Loss: 0.5000\n",
"Epoch: 2000, Loss: 0.5000\n",
"Epoch: 3000, Loss: 0.5000\n",
"Epoch: 4000, Loss: 0.5000\n",
"Epoch: 5000, Loss: 0.5000\n",
"Epoch: 6000, Loss: 0.5000\n",
"Epoch: 7000, Loss: 0.5000\n",
"Epoch: 8000, Loss: 0.5000\n",
"Epoch: 9000, Loss: 0.5000\n",
"Accuracy: 55.00%\n"
]
}
],
"source": [
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.datasets import make_moons\n",
"from sklearn.preprocessing import OneHotEncoder\n",
"\n",
"# Activation function and its derivative\n",
"sigmoid = lambda x: 1 / (1 + np.exp(-x))\n",
"sigmoid_derivative = lambda x: x * (1 - x)\n",
"\n",
"# ANN class\n",
"class NeuralNetwork:\n",
" def __init__(self, input_size, hidden_size, output_size):\n",
" self.W1 = np.random.randn(input_size, hidden_size)\n",
" self.b1 = np.zeros((1, hidden_size))\n",
" self.W2 = np.random.randn(hidden_size, output_size)\n",
" self.b2 = np.zeros((1, output_size))\n",
"\n",
" def forward(self, X):\n",
" self.a1 = sigmoid(np.dot(X, self.W1) + self.b1)\n",
" self.a2 = sigmoid(np.dot(self.a1, self.W2) + self.b2)\n",
" return self.a2\n",
"\n",
" def backward(self, X, y, output):\n",
" d_output = (y - output) * sigmoid_derivative(output)\n",
" d_hidden = d_output.dot(self.W2.T) * sigmoid_derivative(self.a1)\n",
"\n",
" self.W2 += self.a1.T.dot(d_output)\n",
" self.b2 += np.sum(d_output, axis=0, keepdims=True)\n",
" self.W1 += X.T.dot(d_hidden)\n",
" self.b1 += np.sum(d_hidden, axis=0, keepdims=True)\n",
"\n",
" def train(self, X, y, epochs=10000):\n",
" for epoch in range(epochs):\n",
" output = self.forward(X)\n",
" self.backward(X, y, output)\n",
" if epoch % 1000 == 0:\n",
" loss = np.mean(np.square(y - output))\n",
" print(f'Epoch: {epoch}, Loss: {loss:.4f}')\n",
"\n",
"# Create and preprocess dataset\n",
"X, y = make_moons(n_samples=1000, noise=0.2)\n",
"y = OneHotEncoder().fit_transform(y.reshape(-1, 1)).toarray()\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n",
"\n",
"# Initialize and train network\n",
"nn = NeuralNetwork(X_train.shape[1], 10, y_train.shape[1])\n",
"nn.train(X_train, y_train)\n",
"\n",
"# Test network\n",
"output = nn.forward(X_test)\n",
"predictions = np.argmax(output, axis=1)\n",
"accuracy = np.mean(predictions == np.argmax(y_test, axis=1))\n",
"print(f'Accuracy: {accuracy * 100:.2f}%')\n"
]
},
{
"cell_type": "markdown",
"id": "de664698",
"metadata": {
"papermill": {
"duration": 0.008425,
"end_time": "2024-07-22T17:34:18.384846",
"exception": false,
"start_time": "2024-07-22T17:34:18.376421",
"status": "completed"
},
"tags": []
},
"source": [
"5)Aim: Demonstrate the text classifier using Naïve bayes classifier algorithm.\n",
"Program: Write a program to implement the naive Bayesian classifier for a sample training data set stored as a .CSV file. Compute the accuracy of the classifier, considering few test data sets."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f2552236",
"metadata": {
"execution": {
"iopub.execute_input": "2024-07-22T17:34:18.405031Z",
"iopub.status.busy": "2024-07-22T17:34:18.404187Z",
"iopub.status.idle": "2024-07-22T17:34:18.619085Z",
"shell.execute_reply": "2024-07-22T17:34:18.617714Z"
},
"papermill": {
"duration": 0.228041,
"end_time": "2024-07-22T17:34:18.621852",
"exception": false,
"start_time": "2024-07-22T17:34:18.393811",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 150 entries, 0 to 149\n",
"Data columns (total 6 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Unnamed: 0 150 non-null int64 \n",
" 1 SepalLengthCm 150 non-null object \n",
" 2 SepalWidthCm 149 non-null float64\n",
" 3 PetalLengthCm 149 non-null object \n",
" 4 PetalWidthCm 150 non-null float64\n",
" 5 Species 149 non-null object \n",
"dtypes: float64(2), int64(1), object(3)\n",
"memory usage: 7.2+ KB\n",
"None\n",
" Unnamed: 0 SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm \\\n",
"0 1 5.1 3.5 1.4 0.2 \n",
"1 2 4.9 NaN 1.4 0.2 \n",
"2 3 4.7 3.2 1.3 0.2 \n",
"3 4 ?? 3.1 1.5 0.2 \n",
"4 5 5 3.6 ### 0.2 \n",
"\n",
" Species \n",
"0 Iris-setosa \n",
"1 NaN \n",
"2 Iris-setosa \n",
"3 Iris-setosa \n",
"4 Iris-setosa \n",
"['Iris-setosa' nan 'Iris-versicolor' 'Iris-virginica']\n",
"Accuracy: 93.33%\n"
]
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"from collections import defaultdict\n",
"\n",
"class NaiveBayesClassifier:\n",
" def __init__(self):\n",
" self.priors = {}\n",
" self.likelihoods = defaultdict(dict)\n",
"\n",
" def fit(self, X, y):\n",
" self.classes = np.unique(y)\n",
" total_samples = len(y)\n",
"\n",
" for cls in self.classes:\n",
" X_cls = X[y == cls]\n",
" self.priors[cls] = len(X_cls) / total_samples\n",
"\n",
" for column in X.columns:\n",
" self.likelihoods[column][cls] = X_cls[column].value_counts(normalize=True).to_dict()\n",
"\n",
" def predict(self, X):\n",
" results = []\n",
"\n",
" for i in range(len(X)):\n",
" posteriors = {}\n",
"\n",
" for cls in self.classes:\n",
" prior = np.log(self.priors[cls])\n",
" likelihood = sum(\n",
" np.log(self.likelihoods[col].get(cls, {}).get(X.iloc[i][col], 1e-6))\n",
" for col in X.columns\n",
" )\n",
" posteriors[cls] = prior + likelihood\n",
"\n",
" results.append(max(posteriors, key=posteriors.get))\n",
"\n",
" return results\n",
"\n",
" def accuracy(self, y_true, y_pred):\n",
" return np.mean(np.array(y_true) == np.array(y_pred))\n",
"\n",
"# Load data from CSV file\n",
"data = pd.read_csv('/kaggle/input/iris-dataset/Iris_data_sample.csv')\n",
"\n",
"# Inspect data for inconsistencies\n",
"print(data.info())\n",
"print(data.head())\n",
"\n",
"# Check for NaN values and data types in target column\n",
"print(data.iloc[:, -1].unique())\n",
"\n",
"# Separate features and target variable\n",
"X = data.iloc[:, :-1]\n",
"y = data.iloc[:, -1]\n",
"\n",
"# Clean target variable to ensure consistent data type\n",
"y = y.astype(str)\n",
"\n",
"# Split data into training and testing sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"# Initialize and train the Naive Bayes Classifier\n",
"nb_classifier = NaiveBayesClassifier()\n",
"nb_classifier.fit(X_train, y_train)\n",
"\n",
"# Make predictions on the test set\n",
"y_pred = nb_classifier.predict(X_test)\n",
"\n",
"# Compute the accuracy\n",
"accuracy = nb_classifier.accuracy(y_test, y_pred)\n",
"print(f'Accuracy: {accuracy * 100:.2f}%')\n"
]
},
{
"cell_type": "markdown",
"id": "4ce4ad80",
"metadata": {
"papermill": {
"duration": 0.009044,
"end_time": "2024-07-22T17:34:18.640039",
"exception": false,
"start_time": "2024-07-22T17:34:18.630995",
"status": "completed"
},
"tags": []
},
"source": [
"6)Aim: Demonstrate and Analyse the results sets obtained from Bayesian belief network Principle.\n",
"Program:- Write a program to construct a Bayesian network considering medical data. Use this model to demonstrate the diagnosis of heart patients using standard Heart Disease Data Set. You can use Python ML library classes/API."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "f2aa6b28",
"metadata": {
"execution": {
"iopub.execute_input": "2024-07-22T17:34:18.660477Z",
"iopub.status.busy": "2024-07-22T17:34:18.659629Z",
"iopub.status.idle": "2024-07-22T17:34:36.436916Z",
"shell.execute_reply": "2024-07-22T17:34:36.435202Z"
},
"papermill": {
"duration": 17.790467,
"end_time": "2024-07-22T17:34:36.439667",
"exception": false,
"start_time": "2024-07-22T17:34:18.649200",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: numpy in /opt/conda/lib/python3.10/site-packages (1.26.4)\r\n",
"Requirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (2.2.2)\r\n",
"Collecting pgmpy\r\n",
" Downloading pgmpy-0.1.25-py3-none-any.whl.metadata (6.4 kB)\r\n",
"Requirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas) (2.9.0.post0)\r\n",
"Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas) (2023.3.post1)\r\n",
"Requirement already satisfied: tzdata>=2022.7 in /opt/conda/lib/python3.10/site-packages (from pandas) (2023.4)\r\n",
"Requirement already satisfied: networkx in /opt/conda/lib/python3.10/site-packages (from pgmpy) (3.2.1)\r\n",
"Requirement already satisfied: scipy in /opt/conda/lib/python3.10/site-packages (from pgmpy) (1.11.4)\r\n",
"Requirement already satisfied: scikit-learn in /opt/conda/lib/python3.10/site-packages (from pgmpy) (1.2.2)\r\n",
"Requirement already satisfied: pyparsing in /opt/conda/lib/python3.10/site-packages (from pgmpy) (3.1.1)\r\n",
"Requirement already satisfied: torch in /opt/conda/lib/python3.10/site-packages (from pgmpy) (2.1.2+cpu)\r\n",
"Requirement already satisfied: statsmodels in /opt/conda/lib/python3.10/site-packages (from pgmpy) (0.14.1)\r\n",
"Requirement already satisfied: tqdm in /opt/conda/lib/python3.10/site-packages (from pgmpy) (4.66.4)\r\n",
"Requirement already satisfied: joblib in /opt/conda/lib/python3.10/site-packages (from pgmpy) (1.4.2)\r\n",
"Requirement already satisfied: opt-einsum in /opt/conda/lib/python3.10/site-packages (from pgmpy) (3.3.0)\r\n",
"Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\r\n",
"Requirement already satisfied: threadpoolctl>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from scikit-learn->pgmpy) (3.2.0)\r\n",
"Requirement already satisfied: patsy>=0.5.4 in /opt/conda/lib/python3.10/site-packages (from statsmodels->pgmpy) (0.5.6)\r\n",
"Requirement already satisfied: packaging>=21.3 in /opt/conda/lib/python3.10/site-packages (from statsmodels->pgmpy) (21.3)\r\n",
"Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (3.13.1)\r\n",
"Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (4.9.0)\r\n",
"Requirement already satisfied: sympy in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (1.13.0)\r\n",
"Requirement already satisfied: jinja2 in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (3.1.2)\r\n",
"Requirement already satisfied: fsspec in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (2024.5.0)\r\n",
"Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.10/site-packages (from jinja2->torch->pgmpy) (2.1.3)\r\n",
"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /opt/conda/lib/python3.10/site-packages (from sympy->torch->pgmpy) (1.3.0)\r\n",
"Downloading pgmpy-0.1.25-py3-none-any.whl (2.0 MB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m35.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hInstalling collected packages: pgmpy\r\n",
"Successfully installed pgmpy-0.1.25\r\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install numpy pandas pgmpy\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "1b63ea4a",
"metadata": {
"execution": {
"iopub.execute_input": "2024-07-22T17:34:36.463322Z",
"iopub.status.busy": "2024-07-22T17:34:36.462850Z",
"iopub.status.idle": "2024-07-22T17:34:43.229540Z",
"shell.execute_reply": "2024-07-22T17:34:43.228331Z"
},
"papermill": {
"duration": 6.781948,
"end_time": "2024-07-22T17:34:43.232216",
"exception": false,
"start_time": "2024-07-22T17:34:36.450268",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sample instances from the dataset are given below:\n",
" age gender cp trestbps chol fbs restecg thalach exang oldpeak \\\n",
"0 63 1 1 145 233 1 2 150 0 2.3 \n",
"1 67 1 4 160 286 0 2 108 1 1.5 \n",
"2 67 1 4 120 229 0 2 129 1 2.6 \n",
"3 37 1 3 130 250 0 0 187 0 3.5 \n",
"4 41 0 2 130 204 0 2 172 0 1.4 \n",
"\n",
" slope ca thal heartdisease \n",
"0 3 0 6 0 \n",
"1 2 3 3 2 \n",
"2 2 2 7 1 \n",
"3 3 0 3 0 \n",
"4 1 0 3 0 \n",
"\n",
"Attributes and datatypes:\n",
"age int64\n",
"gender int64\n",
"cp int64\n",
"trestbps int64\n",
"chol int64\n",
"fbs int64\n",
"restecg int64\n",
"thalach int64\n",
"exang int64\n",
"oldpeak float64\n",
"slope int64\n",
"ca object\n",
"thal object\n",
"heartdisease int64\n",
"dtype: object\n",
"\n",
"Column names in the dataset:\n",
"Index(['age', 'gender', 'cp', 'trestbps', 'chol', 'fbs', 'restecg', 'thalach',\n",
" 'exang', 'oldpeak', 'slope', 'ca', 'thal', 'heartdisease'],\n",
" dtype='object')\n",
"\n",
"Learning CPD using Maximum likelihood estimators\n",
"\n",
"Inferencing with Bayesian Network:\n",
"\n",
"1. Probability of HeartDisease given evidence= restecg\n",
"+-----------------+---------------------+\n",
"| heartdisease | phi(heartdisease) |\n",
"+=================+=====================+\n",
"| heartdisease(0) | 0.1386 |\n",
"+-----------------+---------------------+\n",
"| heartdisease(1) | 0.0000 |\n",
"+-----------------+---------------------+\n",
"| heartdisease(2) | 0.2403 |\n",
"+-----------------+---------------------+\n",
"| heartdisease(3) | 0.2174 |\n",
"+-----------------+---------------------+\n",
"| heartdisease(4) | 0.4036 |\n",
"+-----------------+---------------------+\n",
"\n",
"2. Probability of HeartDisease given evidence= cp\n",
"+-----------------+---------------------+\n",
"| heartdisease | phi(heartdisease) |\n",
"+=================+=====================+\n",
"| heartdisease(0) | 0.3791 |\n",
"+-----------------+---------------------+\n",
"| heartdisease(1) | 0.1944 |\n",
"+-----------------+---------------------+\n",
"| heartdisease(2) | 0.1533 |\n",
"+-----------------+---------------------+\n",
"| heartdisease(3) | 0.1355 |\n",
"+-----------------+---------------------+\n",
"| heartdisease(4) | 0.1377 |\n",
"+-----------------+---------------------+\n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from pgmpy.estimators import MaximumLikelihoodEstimator\n",
"from pgmpy.models import BayesianModel\n",
"from pgmpy.inference import VariableElimination\n",
"\n",
"# Load the dataset\n",
"heartDisease = pd.read_csv('/kaggle/input/heart-disease-csv/heartdisease.csv')\n",
"heartDisease = heartDisease.replace('?', np.nan)\n",
"\n",
"# Print sample instances and data types\n",
"print('Sample instances from the dataset are given below:')\n",
"print(heartDisease.head())\n",
"\n",
"print('\\nAttributes and datatypes:')\n",
"print(heartDisease.dtypes)\n",
"\n",
"# Ensure the column names are correct\n",
"print('\\nColumn names in the dataset:')\n",
"print(heartDisease.columns)\n",
"\n",
"# Define the model structure with the correct column names\n",
"model = BayesianModel([\n",
" ('age', 'heartdisease'), # 'heartdisease' corresponds to the target variable\n",
" ('exang', 'heartdisease'),\n",
" ('cp', 'heartdisease'),\n",
" ('heartdisease', 'restecg'),\n",
" ('heartdisease', 'chol')\n",
"])\n",
"\n",
"# Learning CPD using Maximum Likelihood Estimators\n",
"print('\\nLearning CPD using Maximum likelihood estimators')\n",
"model.fit(heartDisease, estimator=MaximumLikelihoodEstimator)\n",
"\n",
"# Inferencing with Bayesian Network\n",
"print('\\nInferencing with Bayesian Network:')\n",
"HeartDisease_infer = VariableElimination(model)\n",
"\n",
"# Queries\n",
"print('\\n1. Probability of HeartDisease given evidence= restecg')\n",
"q1 = HeartDisease_infer.query(variables=['heartdisease'], evidence={'restecg': 1})\n",
"print(q1)\n",
"\n",
"print('\\n2. Probability of HeartDisease given evidence= cp')\n",
"q2 = HeartDisease_infer.query(variables=['heartdisease'], evidence={'cp': 1})\n",
"print(q2)\n"
]
},
{
"cell_type": "markdown",
"id": "fe5714cf",
"metadata": {
"papermill": {
"duration": 0.010154,
"end_time": "2024-07-22T17:34:43.252938",
"exception": false,
"start_time": "2024-07-22T17:34:43.242784",
"status": "completed"
},
"tags": []
},
"source": [
"7)Aim: Implement and demonstrate the working model of K-means clustering algorithm with Expectation Maximization Concept.\n",
"Program: Apply EM algorithm to cluster a set of data stored in a .CSV file. Use the same data set for clustering using k-Means algorithm. Compare the results of these two algorithms and comment on the quality of clustering. You can add Python ML library classes/API in the program."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "c5268280",
"metadata": {
"execution": {
"iopub.execute_input": "2024-07-22T17:34:43.276767Z",
"iopub.status.busy": "2024-07-22T17:34:43.276231Z",
"iopub.status.idle": "2024-07-22T17:34:44.584203Z",
"shell.execute_reply": "2024-07-22T17:34:44.582906Z"
},
"papermill": {
"duration": 1.322998,
"end_time": "2024-07-22T17:34:44.587162",
"exception": false,
"start_time": "2024-07-22T17:34:43.264164",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 5.1 3.5 1.4 0.2 Iris-setosa\n",
"0 4.9 3.0 1.4 0.2 Iris-setosa\n",
"1 4.7 3.2 1.3 0.2 Iris-setosa\n",
"2 4.6 3.1 1.5 0.2 Iris-setosa\n",
"3 5.0 3.6 1.4 0.2 Iris-setosa\n",
"4 5.4 3.9 1.7 0.4 Iris-setosa\n",
"Index(['5.1', '3.5', '1.4', '0.2', 'Iris-setosa'], dtype='object')\n",
"Number of columns: 5\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
" warnings.warn(\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"The Adjusted Rand Index of K-Means: 0.6150051194844962\n",
"The Silhouette Score of K-Means: 0.45655541185952575\n",
"The Adjusted Rand Index of GMM: 0.9025775147114491\n",
"The Silhouette Score of GMM: 0.37020510233493803\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABbIAAAIQCAYAAABUlpjmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXhTZdrH8e9J0oWu0FI2QRZZK4i4MIAKKCqriiAIAgKKCqKjo6K4o6PjvswI7q+gbIKgoKAssogjKuAIUhwdVFxAFtlaCt2SPO8fsaGhTZqWpE3L79Or1zQnz3Kf4/ty59x58sQyxhhERERERERERERERCKUrbIDEBEREREREREREREJRIVsEREREREREREREYloKmSLiIiIiIiIiIiISERTIVtEREREREREREREIpoK2SIiIiIiIiIiIiIS0VTIFhEREREREREREZGIpkK2iIiIiIiIiIiIiEQ0FbJFREREREREREREJKKpkC0iIiIiIiIiIiIiEU2FbBEpt59//hnLspg2bVplhyIiIiIiIiJyXCzLYtKkSZU2f/fu3enevbvPsd27d3PFFVeQmpqKZVk8//zzrF69GsuyWL16dYXH2KRJE0aNGlXh84qACtki1cK0adOwLMv763A4OOmkkxg1ahQ7duyo7PBERESqlcK8u2HDBp/jmZmZdOzYkdjYWJYsWcKkSZOwLAubzcZvv/1WbJysrCxq1KiBZVncdNNNFRW+iIhIuWzbto2bbrqJli1bEhcXR1xcHOnp6YwfP55vvvnGp215c2DhYinLsnjkkUdKjGPYsGFYlkVCQkLQsW/cuJHhw4fTqFEjYmJiSElJ4cILL2Tq1Km4XK6gx6kMf/vb31i6dCl3330306dPp1evXmGfc+3atUyaNImDBw+GfS6RsnBUdgAiEjoPP/wwTZs2JTc3ly+++IJp06bx73//m4yMDGJjYys7PBERkWorKyuLiy++mG+++Yb33nuPXr168cUXXwAQExPD7NmzufPOO336vPvuu5URqoiISJktWrSIK6+8EofDwbBhw2jfvj02m43vvvuOd999l5deeolt27bRuHFjn37lzYGxsbHMnj2b++67z+f44cOHWbhwYZnub19//XXGjh1L3bp1GTFiBC1atODQoUOsWLGCa6+9lp07d3LPPfcEPV44LVu2rNixlStXctlll3HHHXd4j7Vs2ZKcnByio6PDEsfatWt56KGHGDVqFDVr1vR57vvvv8dm07pYqRwqZItUI7179+ass84CYMyYMdSuXZsnnniC999/n8GDB1dydCIiItXToUOH6NmzJxs3buTdd9+ld+/ePs/36dOnxJv4WbNm0bdvX+bPn1+R4YqIiJTJjz/+yJAhQ2jcuDErVqygfv36Ps8/8cQTvPjiiyUWN8ubA/v06cO7777Lpk2baN++vff4woULyc/Pp1evXqxcubLU2L/44gvGjh1L586d+fDDD0lMTPQ+d+utt7JhwwYyMjJKHaeilFSY3rNnT7Fiss1mq7TFajExMZUyrwhoaxGRau28884DPC88Cn333XdcccUVpKSkEBsby1lnncX777/v02///v3ccccdtGvXjoSEBJKSkujduzebNm2q0PhFREQiXXZ2Nr169eI///kP8+fPp2/fvsXaXHXVVWzcuJHvvvvOe2zXrl2sXLmSq666qsRx8/LyePDBB2nevDkxMTE0atSIO++8k7y8PJ92U6dO5YILLqBOnTrExMSQnp7OSy+9VGy8Jk2a0K9fP/797397tz9p1qwZb731lk+7goICHnroIVq0aEFsbCypqamce+65LF++vDyXR0REqoEnn3ySw4cPM3Xq1GJFbACHw8Ff//pXGjVqVOy58uRAgM6dO9O0aVNmzZrlc3zmzJn06tWLlJSUoGJ/6KGHsCyLmTNn+hSxC5111lkB93v+5ZdfuPHGG2nVqhU1atQgNTWVQYMG8fPPP/u0CyZ/7tq1i9GjR9OwYUNiYmKoX78+l112mc9YRffILtzKzBjDlClTvFuuAH73yP7yyy/p06cPtWrVIj4+ntNOO41//vOf3ue/+eYbRo0aRbNmzYiNjaVevXpcc8017Nu3z9tm0qRJTJgwAYCmTZt65y2Ms6Q9sn/66ScGDRpESkoKcXFxdOrUicWLF/u0KYx57ty5PProozRs2JDY2Fh69OjBDz/84Pe/gUhRWpEtUo0VJppatWoBsGXLFs455xxOOukkJk6cSHx8PHPnzqV///7Mnz+fyy+/HPAkoQULFjBo0CCaNm3K7t27eeWVV+jWrRvffvstDRo0qKxTEhERiRiHDx+md+/erF+/nnnz5tGvX78S23Xt2pWGDRsya9YsHn74YQDmzJlDQkJCiYVvt9vNpZdeyr///W+uv/562rRpw+bNm3nuuef43//+x4IFC7xtX3rpJU499VQuvfRSHA4HH3zwATfeeCNut5vx48f7jPvDDz9wxRVXcO211zJy5EjeeOMNRo0axZlnnsmpp54KeG5eH3vsMcaMGUPHjh3Jyspiw4YN/Oc//+Giiy4K0ZUTEZGqZNGiRTRv3py//OUvZe5b1hxY1NChQ5kxYwaPP/44lmWxd+9eli1bxvTp01myZEmpcx85coQVK1bQtWtXTj755DLHDrB+/XrWrl3LkCFDaNiwIT///DMvvfQS3bt359tvvyUuLg4ILn8OHDiQLVu2cPPNN9OkSRP27NnD8uXL+fXXX2nSpEmxubt27cr06dMZMWIEF110EVdffXXAWJcvX06/fv2oX78+t9xyC/Xq1eO///0vixYt4pZbbvG2+emnnxg9ejT16tVjy5YtvPrqq2zZsoUvvvgCy7IYMGAA//vf/5g9ezbPPfcctWvXBiAtLa3EeXfv3k2XLl04cuQIf/3rX0lNTeXNN9/k0ksvZd68ed46Q6HHH38cm83GHXfcQWZmJk8++STDhg3jyy+/LNN/GzlBGRGp8qZOnWoA8/HHH5s//vjD/Pbbb2bevHkmLS3NxMTEmN9++80YY0yPHj1Mu3btTG5urrev2+02Xbp0MS1atPAey83NNS6Xy2eObdu2mZiYGPPwww/7HAPM1KlTw3uCIiIiEaQw7zZu3NhERUWZBQsWlNjuwQcfNID5448/zB133GGaN2/ufe7ss882o0ePNsYYA5jx48d7n5s+fbqx2Wzm008/9Rnv5ZdfNoD57LPPvMeOHDlSbN6ePXuaZs2a+Rxr3LixAcyaNWu8x/bs2WNiYmLM7bff7j3Wvn1707dv32Aug4iInAAyMzMNYPr371/suQMHDpg//vjD+1s0J5U3BxbeYz711FMmIyPDAN58OGXKFJOQkGAOHz5sRo4caeLj4wPGvmnTJgOYW265JejzBcyDDz7ofVxSnv38888NYN566y3vsdLy54EDB7znFUi3bt1Mt27disVU9BoZY8yqVasMYFatWmWMMcbpdJqmTZuaxo0bmwMHDvi0dbvdAc9n9uzZxV4jPPXUUwYw27ZtK9a+cePGZuTIkd7Ht956q89/J2OMOXTokGnatKlp0qSJt7ZQGHObNm1MXl6et+0///lPA5jNmzeXeE1EitLWIiLVyIUXXkhaWhqNGjXiiiuuID4+nvfff5+GDRuyf/9+Vq5cyeDBgzl06BB79+5l79697Nu3j549e7J161Z27NgBePa8KtzfzOVysW/fPhISEmjVqhX/+c9/KvMURUREIsbu3buJjY0t8aPUx7rqqqv44YcfWL9+vfd//X2k+p133qFNmza0bt3am6/37t3LBRdcAMCqVau8bWvUqOH9OzMzk71799KtWzd++uknMjMzfcZNT0/3bjsGnpVVrVq14qeffvIeq1mzJlu2bGHr1q3BXQQREanWsrKyAEhISCj2XPfu3UlLS/P+TpkypcQxypIDizr11FM57bTTmD17NuDZV/uyyy7zroIONvaSthQJVtE8W1BQwL59+2jevDk1a9b0uTcuLX/WqFGD6OhoVq9ezYEDB8odjz9ff/0127Zt49Zbby22n3bhdiSFcRTKzc1l7969dOrUCaDc9/offvghHTt25Nxzz/UeS0hI4Prrr+fnn3/m22+/9Wk/evRon73AC1+bFH09IuKPCtki1ciUKVNYvnw58+bNo0+fPuzdu9f7RQw//PADxhjuv/9+nxcbaWlpPPjgg4DnSyTA85Hm5557jhYtWhATE0Pt2rVJS0vjm2++KXZTLCIicqJ65ZVXiI6OplevXnz//fcB23bo0IHWrVsza9YsZs6cSb169byF6WNt3bqVLVu2FMvXLVu2BI7ma4DPPvuMCy+8kPj4eGrWrElaWhr33HMPQLGcXdLHqmvVquVzQ/3www9z8OBBWrZsSbt27ZgwYQLffPNNcBdERESqncIicHZ2drHnXnnlFZYvX86MGTMCjlGWHHisq666infeeYcffviBtWvXBlUAL5SUlAR4vpS5vHJycnjggQdo1KiRz73xwYMHffJsafkzJiaGJ554go8++oi6devStWtXnnzySXbt2lXu2Ioq/F6stm3bBmy3f/9+brnlFurWrUuNGjVIS0ujadOmQPHXDcH65ZdfaNWqVbHjbdq08T5f1LGvRwq3Qg1HgV+qH+2RLVKNdOzYkbPOOguA/v37c+6553LVVVfx/fff43a7Abjjjjvo2bNnif2bN28OwD/+8Q/uv/9+rrnmGv7+97+TkpKCzWbj1ltv9Y4jIiJyoktPT+fDDz+kR48eXHTRRXz22WcBV2dfddVVvPTSSyQmJnLllVd6P/10LLfbTbt27Xj22WdLfL5wjh9//JEePXrQunVrnn32WRo1akR0dDQffvghzz33XLGcbbfbSxzPGOP9u2vXrvz4448sXLiQZcuW8frrr/Pcc8/x8ssvM2bMmIDXQ0REqp/k5GTq169PRkZGsecK98w+9osPSxJsDjzW0KFDufvuu7nuuutITU3l4osvDjr25s2b43A42Lx5c9B9jnXzzTczdepUbr31Vjp37kxycjKWZTFkyBCfPBtM/rz11lu55JJLWLBgAUuXLuX+++/nscceY+XKlXTo0KHcMZbF4MGDWbt2LRMmTOD0008nISEBt9tNr169KuxeP5jXIyL+qJAtUk3Z7XYee+wxzj//fCZPnsw111wDQFRUFBdeeGHAvvPmzeP888/n//7v/3yOHzx40PtFDyIiIuJ5E3nBggX07duXiy66iE8//dTvlyFdddVVPPDAA+zcuZPp06f7HfOUU05h06ZN9OjRw+fjwMf64IMPyMvL4/333/dZ3VR065HySElJYfTo0YwePZrs7Gy6du3KpEmTVMgWETlB9e3bl9dff51169bRsWPHco0RbA481sknn8w555zD6tWrGTduHA5H8GWsuLg4LrjgAlauXMlvv/0W1FZgx5o3bx4jR47kmWee8R7Lzc3l4MGDxdoGkz9POeUUbr/9dm6//Xa2bt3K6aefzjPPPFPqqvbSnHLKKQBkZGT4vd8/cOAAK1as4KGHHuKBBx7wHi9pO5RArz+O1bhx4xI/mfbdd995nxcJFW0tIlKNde/enY4dO/L888+TlJRE9+7deeWVV9i5c2extn/88Yf3b7vdXuzd0Hfeece7h7aIiIgc1aNHD2bPns0PP/xAr169vHtyHuuUU07h+eef57HHHgtYCBg8eDA7duzgtddeK/ZcTk4Ohw8fBo6uaCqaszMzM5k6dWq5z2Xfvn0+jxMSEmjevDl5eXnlHlNERKq2O++8k7i4OK655hp2795d7PlgVtIGmwNL8sgjj/Dggw9y8803l6kfwIMPPogxhhEjRpS4PcpXX33Fm2++6bd/SffGL7zwAi6Xy+dYafnzyJEj5Obm+rQ55ZRTSExMDEmOPeOMM2jatCnPP/98sSJ7YfwlvW4AeP7554uNFx8fD1Biwf5Yffr0Yd26dXz++efeY4cPH+bVV1+lSZMmpKenl+FMRALTimyRam7ChAkMGjSIadOmMWXKFM4991zatWvHddddR7Nmzdi9ezeff/4527dvZ9OmTQD069ePhx9+mNGjR9OlSxc2b97MzJkzadasWSWfjYiISGS6/PLLee2117jmmmu49NJLWbJkSYntbrnlllLHGjFiBHPnzmXs2LGsWrWKc845B5fLxXfffcfcuXNZunQpZ511FhdffDHR0dFccskl3HDDDWRnZ/Paa69Rp06dEt+0DkZ6ejrdu3fnzDPPJCUlhQ0bNjBv3jxuuummco0nIiJVX4sWLZg1axZDhw6lVatWDBs2jPbt22OMYdu2bcyaNQubzUbDhg0DjhNMDixJt27d6NatW7n6dunShSlTpnDjjTfSunVrRowYQYsWLTh06BCrV6/m/fff55FHHvHbv1+/fkyfPp3k5GTS09P5/PPP+fjjj0lNTfVpV1r+/N///kePHj0YPHgw6enpOBwO3nvvPXbv3s2QIUPKdW5F2Ww2XnrpJS655BJOP/10Ro8eTf369fnuu+/YsmULS5cuJSkpybs3d0FBASeddBLLli1j27ZtxcY788wzAbj33nsZMmQIUVFRXHLJJd4Cd1ETJ05k9uzZ9O7dm7/+9a+kpKTw5ptvsm3bNubPnx/0NjIiwVAhW6SaGzBgAKeccgpPP/001113HRs2bOChhx5i2rRp7Nu3jzp16tChQwefjxbdc889HD58mFmzZjFnzhzOOOMMFi9ezMSJEyvxTERERCLb6NGj2b9/P3fccQeDBg2iffv25RrHZrOxYMECnnvuOd566y3ee+894uLiaNasGbfccov3Sx9btWrFvHnzuO+++7jjjjuoV68e48aNIy0tzbulWFn99a9/5f3332fZsmXk5eXRuHFjHnnkESZMmFCu8UREpHq47LLL2Lx5M8888wzLli3jjTfewLIsGjduTN++fRk7dmy581643XDDDZx99tk888wzvPXWW/zxxx8kJCRwxhlnMHXqVIYPH+637z//+U/sdjszZ84kNzeXc845h48//rjY906Vlj8bNWrE0KFDWbFiBdOnT8fhcNC6dWvmzp3LwIEDQ3KePXv2ZNWqVTz00EM888wzuN1uTjnlFK677jpvm1mzZnHzzTczZcoUjDFcfPHFfPTRRzRo0MBnrLPPPpu///3vvPzyyyxZsgS32822bdtKLGTXrVuXtWvXctddd/HCCy+Qm5vLaaedxgcffEDfvn1Dcm4ihSyj3dRFREREREREREREJIJpfb+IiIiIiIiIiIiIRDQVskVEREREREREREQkoqmQLSIiIiIiIiIiIiIRTYVsEREREREREREREYloKmSLiIiIiIiIiIiISERTIVtEREREREREREREIpqjsgMINbfbze+//05iYiKWZVV2OCIiUg0ZYzh06BANGjTAZtN7wuWlnC0iIuGkfB0aytciIhJOZcnX1a6Q/fvvv9OoUaPKDkNERE4Av/32Gw0bNqzsMKos5WwREakIytfHR/laREQqQjD5utoVshMTEwHPySclJVVyNCIiUh1lZWXRqFEjb86R8lHOFhGRcFK+Dg3laxERCaey5OtqV8gu/KhTUlKSkqyIiISVPl57fJSzRUSkIihfHx/laxERqQjB5GttFCYiIiIiIiIiIiIiEU2FbBERERERERERERGJaCpki4iIiIiIiIiIiEhEUyFbRERERERERERERCKaCtkiIiIiIiIiIiIiEtFUyBYRERERERERERGRiKZCtoiIiIiIiIiIiIhENBWyRURERERERERERCSiqZAtIiIiIiIiIiIiIhFNhWwRERERERERERERiWgqZIuIiIiIiIiIiIhIRFMhW0REREREREREREQimgrZIiIiIiIiIiIiIhLRHJUdgIiIlI0xhtWrV/PRRx+Rn5/P2WefzcCBA4mNjS3zWG63mxUrVrBs2TKcTid/+ctfGDBgANHR0WzdupXZs2ezd+9eGjduzPDhw6lbt24YzkhERKSa+uUXmDkTdu2CBg1g+HBo2LB8Y/30E8yaBXv2eMYYMQLq14fsbJg9GzIyIC4OLr8cOnYM7XmIiIhUYznkMJe5fM3XxBBDP/pxLudiYZV5rMMcZg5z2MQmalCDS7mUznQGYBWrWMIS8snnbM7mCq4ghphQn061ZhljTGUHEUpZWVkkJyeTmZlJUlJSZYcjIhJSO3bsoF+/fmzcuBGHw4FlWRQUFJCamsr8+fPp1q1b0GP98ssv9O3bly1btviMlZaWRqdOnfjggw+w2+3YbDZcLhc2m41HHnmEu+66K4xnWDUo14SGrqOIVFtuN0yYAM89Bzab59ftBmNg4kR45BGwgrw5drngllvgxRePjuVyefoPGgSLFsHhw+BweMZ3OuH882H+fKhVK7znGeGUZ0JD11FEqrPlLGcwgznIQaKIwmBw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5rOOdThwcDEXcyEXArCOdSxgAUc4QjvaMYQhJJDA7/zODGawne3UoQ7DGEZTmpJLLvOYxwY2EE00velNd7pj4f8e158ccpjLXL7ma2KIoR/9OJdzA471C78wk5nsYhcNaMBwhtMQ/zneYFjFKpawhHzyOZuzuYIriKHq/Xt7kIPMZCb/438kksggBtGe9hUzuQmjQ4cOma+//tp8/fXXBjDPPvus+frrr80vv/xijDFm4sSJZsSIEd72zz33nFmwYIHZunWr2bx5s7nllluMzWYzH3/8cdBzZmZmGsBkZmaG/HxE5MTxxx9/mHPPPdcAxuFwmKioKAOYxMREM3jwYGOz2YzdbjdRUVHGbrcby7LMwIEDTc2aNQ1goqKijMPhMIA5/fTTTYcOHYqNVatWLbNs2bIyxbV9+3Zz+umnFxsrNTXVrF69usQ+7777rklISDCWZfnEdf7555v9+/cXa19QUGDGjBljAO852mw243A4zOOPP16u61lZNm/ebE4++WTvf5PC69W0aVOzZcuWco9bHXONcraIVElutzGTJhljtxtjsxkTFeX527KM6d/fmJQUY8Bz3OHw/N22rTFnneX52+HwPAfGJCYaM3iwZxy73Xes2283xuUKPi6Xy5jbbvP0LTqWzWbMPfd44j7W9u3GnH568bhSU4355JOS53n3XWMSEjzzFD3H8883poQcH7FycjzXHo5eL5vNmOhoY156qdzDVsc8o3wtIlXVWrPWpJk0g8FEmSjjMA6DwbQxbUwn08lgMA7jMFEmyljGMgkmwVxprjR2Yzc2YzNRJsrYjd1YxjKXm8tNikkpNtbp5nSz3WwvU1zLzDJT09QsNlZH09HsMruKtXcZl7nN3GYsYxm7sXvjshmbudfca9ymeI7/zfxm2pv2PueIwaSaVPOJ8ZPjI9Q0M83EmlhjGcvnel1mLjPZJrtcY5Ylz4S1kL1q1SoDFPsdOXKkMcaYkSNHmm7dunnbP/HEE+aUU04xsbGxJiUlxXTv3t2sXLmyTHMqyYrI8XK5XObss882dru9xH/DAv1alhV0W5vNZqKjo80333wTVFx5eXmmdevW3kL0sWPFxsaa7777zqfPZ5995i20H9vHbreb8847z7iPuZn+61//GvA8XnvttZBd63Das2ePqV27don/He12u6lTp47Zt29fucaujrlGOVtEqqR/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mE1Hq5CsrCySk5PJzMwkKSmp9A4iIhFq//79TJ8+nU2bNhEbG8ull17KxRdfHHAP7c2bNzN9+nT27NlDw4YNGTVqFM0Lb7CrAWMM69at4+233+bgwYOccsopjBo1ioYNG1ZoHMo1oaHrKCLVgssFH30EixdDXp6neD1iBCQn+++zfz+89RZ88w3ExsJll8FFF5W+h3ZVsmsXTJvm+cLLpCQYNAjOOafk1ehhojwTGrqOIlJdfMd3vMVb/M7v1Kc+IxhBOul+27tw8REfsZjF5JHHGZzBCEaQTIAcX8Xkk897vMcKVuDGTRe6MIQhQe8tHgplyTMqZIuIiJSRck1o6DqKiEg4Kc+Ehq6jiIiEU1nyTDV6y19EREREREREREREqiMVskVEREREREREREQkoqmQLSIiIiIiIiIiIiIRTYVsEREREREREREREYloKmSLiIiIiIiIiIiISERTIVtEREREREREREREIpqjsgMQETkRGGP49NNPWbx4MXl5eXTo0IHBgwdTo0YNfv31V2bMmMGuXbto0KABw4cPp2HDhhw5coQ5c+awceNGatSowaWXXkrnzp0BWL16NR999BH5+fmcffbZDBw4kNjYWL/zZ2dnM3v2bDIyMoiLi6N///507NgRy7Iq6hKUicvl4qOPPmLVqlUYYzjvvPO45JJLcDiUtkREJMy2b4cZM+D336FePRg+HE4+GXJyYO5c+PpriImBvn3hvPM8fT79FBYtgvx8OOMMGDQIatSAX36BmTNh1y5o0MAzVsOG/uc2BlatgiVLPGOdfTZccYVnvkj13Xfw9tuwfz80beo5x7S0yo5KRESquVxymcc8NrCBaKLpTW+60x2AtazlAz4gl1za054ruZI44viN35jBDHayk3rUYzjDOZmTySGHuczla74mhhj60Y9zORcL//fLv/ALM5nJLnbRgAYMZzgNCZDjK1kWWcxiFv/lvySQwEAGcgZnVHZYZWYZY0xlBxFKWVlZJCcnk5mZSVJSUmWHIyLC7t27ueSSS1i/fj0OhwPLsigoKKBWrVpccMEFvPvuu9hsNmw2G263G2MMV1xxBUuWLCErK4uoqCiMMTidTs466yxyc3PJyMjwGSs1NZX58+fTrVu3YvO/9957XH311Rw+fBiHw+Ed6/zzz2f+/PnUqlWrEq6Kf9999x19+/blp59+IioqCoCC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2Xyv11/+AgsWeK5jMC6/HCZP9vz3OHasc8+FuXPDcgonCuVrEalsFhYLWUhHOgKeVcAOHNiwEUUUfeiDhYUdu/c5gO50J5FELCyf4ydzMqdyarGxoolmOtPp7snygmc7kJWspCENAXyuYwIJLGYxLWgR1Fg1qckqVlGPesXGSiaZJSyhCU1CfxLHyTIV9C1olmXx3nvv0b9/f79t7rrrLhYvXuzzRWlDhgzh4MGDLFmyJKh5srKySE5OJjMzk6SkpOMNW0SqkR9++IE333yT3377jTp16jBixAjatWvHoUOHmDFjBuvXryc6OprevXvTt29fbDYby5cvZ+HCheTm5nLaaadx9dVXk5KSwvfff89bb73Fjh07qFevHldffTXp6emVfYoRa/369cyePZv9+/fTtGlTRo0aRePGjcs8jjGGdevW8fbbb3Pw4EFOOeUURo0aRcOGDcMQtX/VPdcoZ4tIZcrOzmbWrFl8+eWXOBwOevbsySWXXILdbmflypUsWLCAI0eO0LZtW0aOHElqaips3Qpvvgnbt0OdOjBiBLRrB1lZMHMmrF8P0dHQp4/ntxxbmJwQ9uyBadPgv/+FhAQYOBC6dQu+iF3Url2esb7/HpKSYNAgOOec8o1VTtU9zyhfi0hlMhhWs5p3eZdsskknnVGMIo00fuIn3uRNfuEX0khjGMM4ndPJJpuZzGQd63DgoCc9uZRLsWFjBStYyEKOcIS2tGUkI0kltbJPMyIVUMD7vM8yluHESSc6MZShQe17fax88nmP91jBCty46UIXhjCEuLJt2nZcypJnIqqQ3bVrV8444wyef/5577GpU6dy6623kplZ8jeU5uXlkZeX532clZVFo0aNlGRFRCRsqvsNnXK2iIhUB8rXytciIhL5ypKvI+rLHnft2kXdunV9jtWtW5esrCxycnJK7PPYY4+RnJzs/W3UqFFFhCoiInJCU84WERGJfMrXIiJSnURUIbs87r77bjIzM72/v/32W2WHJCIiIiVQzhYREYl8ytciIhKpImpzuHr16rF7926fY7t37yYpKYkaNWqU2CcmJoaYmJiKCE9ERET+pJwtIiIS+ZSvRUSkOomoFdmdO3dmxYoVPseWL19O586dKykiERERKYlytoiISORTvhYRkeokrIXs7OxsNm7cyMaNGwHYtm0bGzdu5NdffwU8H1m6+uqr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qPXnJ56K5sU6deqwcuXKYm/wXnfddTz00ENYllUsl1566aUB/70IVitasYhFJd7Hn8zJrGRlRG0tEk00H/MxzWkO+NYEalCD+cznDM6o5ChPTGH9XHzt2rWx2+3s3r3b5/ju3bupV69eUGNERUXRoUMHfvjhhxKfj4mJ0SpDkSoshRQ+4zM+4RPmM59ssmlDG0YxijrUKbHPBVzADnYwi1l8yZc4cNCTnlzCJSHbt7oBDfiar1nOchaykFxyOY3TuJqrfbY6iRRRUVG89dZbTJgwgenTp7Nnzx4aNmzIqFGjaN68eWWHJxGuIvI1KGeLVGmW5VmVffXVMG0abNsGKSlw1VVw1lkl90lNhc8+g08+gfnzITvbU6wdORLqlJzjyx6WxTPPPMPYsWN588032b59O3Xq1GHEiBG0a9cuJHOE3ODBcOGF8NZb8M03EBsLl10GF11U+h7ackJTvhaRYHTq1InffvuNuXPn8umnn2JZFueffz4DBw4s8f+3LcvigQceYOTIkUybNo1t27aRmprK0KFDOctfji+HHvRgBzuYyUzWsc57H38pl0bMtp1FnczJZJDBR3zEYhaTRx5ncAYjGEEyyZUd3gnLMiaYb2Epv7/85S907NiRF154AfBsEn/yySdz0003MXHixFL7u1wuTj31VPr06cOzzz5bavusrCySk5PJzMwkKSnpuOMXERE5VnXMNRWdr6F6XkcREYkc1THPKF+LiEh1U5Y8E/a3PG677TZGjhzJWWedRceOHXn++ec5fPjw/7N33/FRVekfxz937qRDKi0BpEsRWMWKuqCCggVBBWmKWLD/XF0bsoqLZV3Luroq4ooKioJSbLi6i2BDmgUUFVGRolQhkBBCSGbm/P4YGTJkJplJZjKT8H3nlZeZM+ee+9wb9cl57p1zufTSSwEYNWoUzZs354EHHgDgnnvu4YQTTqB9+/bs2rWLhx9+mPXr13PFFVdEO1QREZFDlvK1iIhI/FO+FhGRQ1nUC9lDhw7lt99+Y/z48WzZsoUjjzyS9957z/eAig0bNvgtQr9z507GjBnDli1byMrK4uijj2bRokV06dIl2qGKiIgcspSvRURE4p/ytYiIHMqivrRIbdPHnkREJNqUayJD51FERKJJeSYydB5FRCSawskzepqIiIiIiIiIiIiIiMQ1FbJFREREREREREREJK6p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DgeXXnppLUZVPQMGDKBx48Zh35VtWRbp6ekMGTIkSpGJiIjU3JVXXlnlBdvrrruulqKpvuTkZC6//PJKl0kJxu12c+2110YhKpFDmwrZcsizsHiRF0kkERv/BOXESQYZTGRijKILz+mczuVcDhB0uZSDC/Y2Ns1pzgM8EPX4REREauKWW27hyCOPrDCh3F8Q/te//kWzZs1iEVpYEhMTefHFF3E4HBWOxbZtbNuuUOS2bRvLsnjhhRdITU2tzXBFRETCcvjhh3P//fcDVMhnDoeD3r17c+WVV8YitLDdfffdtGvXLmC+3u/g515YlsWwYcMYNGhQbYQockhRIVsEOJETWcxizuEcX6E3gQRGMpLP+ZwOdIhxhKGxsPg3/+ZJnvRbJqQVrXicx/mIjziN03ztKaRwJVeyjGU0pWksQhYREQlZWloaH330EbfccgsZGRm+9mOOOYa33nqLa665JobRhad///588sknnH766b4JcHJyMpdddhkrVqzgmmuu8StY9+rViwULFnD++efHKmQREZGQjRs3junTp/str9GoUSPuuusu3n33XRITE2MYXeiys7NZvHgx119/PQ0aNPC1n3TSScybN49JkybRtm1bX3uLFi145JFHmDZtWrWfhyEiwVnGmKoXB65DCgsLycjIoKCggPR0LZMg4SuggJ3spDGNSaN662HFAw8eNrMZgyGPPL87sfPJZze7aUITUkiJYZQidZNyTWToPEpNlJaWsmXLFlJSUmjcuHGsw6mRnTt3UlhYSJMmTUhJOZCXS0pK2Lp1Kw0bNiQ7OzuGEYrUTcozkaHzKDVhjGHr1q2UlpaSl5dX6drZ8W7fvn1s2bKFBg0akJOT42s3xrBp0yaMMeTl5amALRKmcPJM3f0/iEiUZPz+Vdc5cNCc5gHfy/79S0REpK5KTEzksMMOi3UYEZGVlUVWVlaF9uTkZFq10oOYRUSk7rIsq04s+xWKpKSkgHnZsiyaNw889xaRyNJlIhERERERERERERGJaypki4iIiIiIiIiIiEhcUyFbREREREREREREROKaCtkiIiIiIiIiIiIiEtdUyBYRERERERERERGRuKZCtkgUFVHEGtZQSmnI22xhC7/yKx48IfV34yaffEooqW6YFcbaxz6/doOhkEJ2s7vG+xAREYk3LpeLtWvXkp+fH/I2RUVFrFmzhtLS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iIiIiIiIiIjENRWyRURERERERERERCSuqZAtIiIiIiIiIiIiInFNhWwRERERERERERERiWsqZIuIiIiIiIiIiIhIXFMhW0RERERERERERETimgrZIiIiIiIiIiIiIhLXVMgWERERERERERERkbimQraIiIiIiIiIiIiIxDUVskVEREREREREREQkrqmQLSIiIiIiIiIiIiJxTYVsEREREREREREREYlrKmSLiIiIiIiIiIiISFxTIVtERERERERERERE4poK2SIiIiIiIiIiIiIS11TIFhEREREREREREZG4FtVCdn5+PiNHjiQ9PZ3MzEwuv/xyioqKKt3mlFNOwbIsv++rr746mmGKiIgc0pSvRURE4p/ytYiIHOqc0Rx85MiRbN68mXnz5lFWVsall17KlVdeySuvvFLpdmPGjOGee+7xvU5NTY1mmCIiIoc05WsREZH4p3wtIiKHuqgVsletWsV7773HZ599xjHHHAPAE088wVlnncUjjzxCXl5e0G1TU1Np1qxZtEITERGR3ylfi4iIxD/laxERkSguLbJ48WIyMzN9SRagb9++OBwOli5dWum2L7/8Mo0aNaJr167ccccdFBcXB+27b98+CgsL/b5FREQkNLWVr0E5W0REpLqUr0VERKJ4R/aWLVto0qSJ/86cTrKzs9myZUvQ7UaMGEGrVq3Iy8vj66+/5vbbb2f16tXMmTMnYP8HHniACRMmRDR2ERGRQ0Vt5WtQzhYREaku5WsREZFqFLLHjh3Lgw8+WGmfVatWVTugK6+80vdzt27dyM3NpU+fPqxZs4Z27dpV6H/HHXfw5z//2fe6sLCQli1bVnv/IiIi9UG85WtQzhYRETmY8rWIiEjowi5k33zzzYwePbrSPm3btqVZs2Zs27bNr93lcpGfnx/W+lzHH388AD/99FPARJuUlERSUlLI44mIiBwK4i1fg3K2iIjIwZSvRUREQhd2Ibtx48Y0bty4yn49e/Zk165dfPHFFxx99NEALFiwAI/H40ueoVixYgUAubm54YYqIiJyyFK+FhERiX/K1yIiIqGL2sMeO3fuTP/+/RkzZgzLli3j008/5frrr2fYsGG+Jypv3LiRTp06sWzZMgDWrFnDvffeyxdffMG6det46623GDVqFL169aJ79+7RClVEROSQpXwtIiIS/5SvRUREoljIBu/TkTt16kSfPn0466yzOPnkk/n3v//te7+srIzVq1f7npqcmJjI+++/zxlnnEGnTp24+eabueCCC3j77bejGaaIiMghTflaREQk/ilfi4jIoc4yxphYBxFJhYWFZGRkUFBQQHp6eqzDERGReki5JjJ0HkVEJJqUZyJD51FERKIpnDwT1TuyRURERERERERERERqSoVsEREREREREREREYlrKmSLiIiIiIiIiIiISFxTIVtERERERERERERE4poK2SIiIiIiIiIiIiIS11TIFhEREREREREREZG4pkK2iIiIiIiIiIiIiMQ1FbJFREREREREREREJK6pkC0iIiIiIiIiIiIicU2FbBERERERERERERGJaypki4iIiIiIiIiIiEhcUyFbREREREREREREROKaCtkiIiIiIiIiIiIiEtdUyBYRERERERERERGRuKZCtoiIiIiIiIiIiIjENRWyRURERERERERERCSuqZAtIiIiIiIiIiIiInFNhWwRERERERERERERiWsqZIuIiIiIiIiIiIhIXFMhW0RERERERERERETimgrZIiIiIiIiIiIiIhLXVMgWERERERERERERkbimQraIiIiIiIiIiIiIxDUVskVEREREREREREQkrqmQLSIiIiIiIiIiIiJxTYVsEREREREREREREYlrKmSLiIiIiIiIiIiISFxTIbuuMQYKCqCoKNaRiIiISCVKKGEnO/HgiXUoIiIiEozbDfn5sG9frCMREZEqqJBdV3g88PTT0LEjZGZCw4Zw3HEwa1asIxMREZFylrCEAQwgjTSyyaYpTRnPeHazO9ahiYiIyH47dsCtt0JOjvc7LQ2GDoWvv451ZCIiEoQK2XWBxwOjRsG118JPPx1o/+ILGDIE7rkndrGJiIiIz5u8ycmczLu867sTezvb+Rt/44/8UcVsERGReLBtm/fGsH/+0/uJZ/DemT1nDhx/PHz8cWzjExGRgFTIrgtmz4aXX/b+bMyBds/vH1W++25YsaLWwxIREZED9rCHi7kYDx7cuP3ec+PmG77hHnTxWUREJOZuvRU2bPAWr8tzuaC0FIYP9/4sIiJxRYXsuuCpp8C2g7/vdHqXHREREZGYmcEMdrMbgwn4vhs3z/IspZTWcmQiIiLis3MnTJ8evFDt8cCmTfDuu7Ubl4iIVEmF7Lrg668rXikuz+XSHdkiIiIxtpKV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",
"text/plain": [
"<Figure size 1800x600 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.cluster import KMeans\n",
"from sklearn.mixture import GaussianMixture\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.metrics import silhouette_score, adjusted_rand_score\n",
"\n",
"# Load the dataset\n",
"csv_path = \"/kaggle/input/iris-2-csv/iris 2.csv\"\n",
"dataset = pd.read_csv(csv_path)\n",
"\n",
"# Inspect columns\n",
"print(dataset.head())\n",
"print(dataset.columns)\n",
"print(f\"Number of columns: {len(dataset.columns)}\")\n",
"\n",
"# Update column names based on inspection\n",
"# Ensure the number of names matches the number of columns in the dataset\n",
"names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']\n",
"dataset.columns = names\n",
"\n",
"# Prepare features and labels\n",
"X = dataset.iloc[:, :-1] # Features\n",
"y = dataset['class'].map({'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2}) # Labels\n",
"\n",
"# Standardize features\n",
"scaler = StandardScaler()\n",
"X_scaled = scaler.fit_transform(X)\n",
"\n",
"plt.figure(figsize=(18, 6))\n",
"\n",
"# REAL PLOT\n",
"plt.subplot(1, 3, 1)\n",
"plt.title('Real')\n",
"colormap = np.array(['red', 'lime', 'black'])\n",
"plt.scatter(X_scaled[:, 2], X_scaled[:, 3], c=colormap[y])\n",
"\n",
"# K-Means Clustering\n",
"kmeans_model = KMeans(n_clusters=3, random_state=0).fit(X_scaled)\n",
"y_kmeans = kmeans_model.labels_\n",
"plt.subplot(1, 3, 2)\n",
"plt.title('KMeans')\n",
"plt.scatter(X_scaled[:, 2], X_scaled[:, 3], c=colormap[y_kmeans])\n",
"print('The Adjusted Rand Index of K-Means: ', adjusted_rand_score(y, y_kmeans))\n",
"print('The Silhouette Score of K-Means: ', silhouette_score(X_scaled, y_kmeans))\n",
"\n",
"# Gaussian Mixture Model (GMM)\n",
"gmm_model = GaussianMixture(n_components=3, random_state=0).fit(X_scaled)\n",
"y_gmm = gmm_model.predict(X_scaled)\n",
"plt.subplot(1, 3, 3)\n",
"plt.title('GMM Classification')\n",
"plt.scatter(X_scaled[:, 2], X_scaled[:, 3], c=colormap[y_gmm])\n",
"print('The Adjusted Rand Index of GMM: ', adjusted_rand_score(y, y_gmm))\n",
"print('The Silhouette Score of GMM: ', silhouette_score(X_scaled, y_gmm))\n",
"\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "121637d2",
"metadata": {
"papermill": {
"duration": 0.012286,
"end_time": "2024-07-22T17:34:44.611478",
"exception": false,
"start_time": "2024-07-22T17:34:44.599192",