pranayshivagoud commited on
Commit
bb52310
Β·
verified Β·
1 Parent(s): 663376b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -73
app.py CHANGED
@@ -1,73 +1,73 @@
1
- import streamlit as st
2
- import numpy as np
3
- import matplotlib.pyplot as plt
4
- from sklearn.neighbors import KNeighborsClassifier
5
- from sklearn.metrics import accuracy_score,f1_score
6
- from sklearn.model_selection import train_test_split
7
- from sklearn.datasets import make_classification, make_circles, make_blobs, make_moons
8
- from mlxtend.plotting import plot_decision_regions, plot_learning_curves
9
-
10
- # Streamlit UI
11
- st.set_page_config(page_title="KNN Classifier App", layout="wide")
12
- st.title("πŸ” KNN Classifier Interactive App")
13
- st.write("Select a dataset, modify parameters, and tune KNN hyperparameters.")
14
-
15
- # Sidebar options
16
- dataset_choice = st.sidebar.selectbox("πŸ“‚ Select a Dataset", ["Classification", "Circles", "Blobs", "Moons"])
17
-
18
- # Dataset parameters
19
- if dataset_choice == "Classification":
20
- n_samples = st.sidebar.slider("Samples", 1000, 5000, 2000)
21
- class_sep = st.sidebar.slider("Class Separation", 0.5, 5.0, 1.0)
22
- X, y = make_classification(n_samples=n_samples, n_features=2, n_redundant=0,
23
- n_clusters_per_class=1, class_sep=class_sep, random_state=23)
24
-
25
- elif dataset_choice == "Circles":
26
- n_samples = st.sidebar.slider("Samples", 500, 5000, 2000)
27
- noise = st.sidebar.slider("Noise", 0.0, 0.5, 0.2)
28
- factor = st.sidebar.slider("Factor", 0.1, 0.9, 0.2)
29
- X, y = make_circles(n_samples=n_samples, factor=factor, noise=noise, random_state=23)
30
-
31
- elif dataset_choice == "Blobs":
32
- n_samples = st.sidebar.slider("Samples", 500, 5000, 2000)
33
- clusters = st.sidebar.slider("Clusters", 2, 5, 3)
34
- X, y = make_blobs(n_samples=n_samples, centers=clusters, n_features=2, random_state=23)
35
-
36
- else: # Moons
37
- n_samples = st.sidebar.slider("Samples", 500, 5000, 2000)
38
- noise = st.sidebar.slider("Noise", 0.0, 0.5, 0.2)
39
- X, y = make_moons(n_samples=n_samples, noise=noise, random_state=23)
40
-
41
- # Split dataset
42
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=23)
43
-
44
- # KNN Parameters
45
- st.sidebar.subheader("βš™οΈ KNN Parameters")
46
- n_neighbors = st.sidebar.slider("Neighbors (k)", 1, 15, 3)
47
- weights = st.sidebar.selectbox("Weights", ["uniform", "distance"])
48
- p = st.sidebar.selectbox("p (Minkowski)", [1, 2])
49
-
50
- # Train KNN
51
- knn = KNeighborsClassifier(n_neighbors=n_neighbors, weights=weights, p=p, metric='minkowski')
52
- knn.fit(X_train, y_train)
53
- y_pred = knn.predict(X_test)
54
- accuracy = accuracy_score(y_test, y_pred)
55
- f1=f1_score(y_test,y_pred)
56
-
57
- # Display results
58
- st.subheader("πŸ“Š Model Accuracy")
59
- st.write(f"**Accuracy Score: {accuracy:.4f}**")
60
-
61
- st.subheader("πŸ“Š Model F1-Score")
62
- st.write(f"f1 Score: {f1:.4f}")
63
-
64
- fig, ax = plt.subplots(figsize=(6, 4))
65
- plot_learning_curves(X_train, y_train, X_test, y_test, knn, scoring='accuracy')
66
- st.subheader("πŸ“ˆ Learning Curve")
67
- st.pyplot(fig)
68
-
69
- fig, ax = plt.subplots(figsize=(6, 4))
70
- knn.fit(X, y)
71
- plot_decision_regions(X, y, knn)
72
- st.subheader("πŸ”· Decision Boundary")
73
- st.pyplot(fig)
 
1
+ import streamlit as st
2
+ import numpy as np
3
+ import matplotlib.pyplot as plt
4
+ from sklearn.neighbors import KNeighborsClassifier
5
+ from sklearn.metrics import accuracy_score,f1_score
6
+ from sklearn.model_selection import train_test_split
7
+ from sklearn.datasets import make_classification, make_circles, make_blobs, make_moons
8
+ from mlxtend.plotting import plot_decision_regions, plot_learning_curves
9
+
10
+ # Streamlit UI
11
+ st.set_page_config(page_title="KNN Classifier App", layout="wide")
12
+ st.title("πŸ” KNN Classifier Interactive App")
13
+ st.write("Select a dataset, modify parameters, and tune KNN hyperparameters.")
14
+
15
+ # Sidebar options
16
+ dataset_choice = st.sidebar.selectbox("πŸ“‚ Select a Dataset", ["Classification", "Circles", "Blobs", "Moons"])
17
+
18
+ # Dataset parameters
19
+ if dataset_choice == "Classification":
20
+ n_samples = st.sidebar.slider("Samples", 1000, 5000, 2000)
21
+ class_sep = st.sidebar.slider("Class Separation", 0.5, 5.0, 1.0)
22
+ X, y = make_classification(n_samples=n_samples, n_features=2, n_redundant=0,
23
+ n_clusters_per_class=1, class_sep=class_sep, random_state=23)
24
+
25
+ elif dataset_choice == "Circles":
26
+ n_samples = st.sidebar.slider("Samples", 500, 5000, 2000)
27
+ noise = st.sidebar.slider("Noise", 0.0, 0.5, 0.2)
28
+ factor = st.sidebar.slider("Factor", 0.1, 0.9, 0.2)
29
+ X, y = make_circles(n_samples=n_samples, factor=factor, noise=noise, random_state=23)
30
+
31
+ elif dataset_choice == "Blobs":
32
+ n_samples = st.sidebar.slider("Samples", 500, 5000, 2000)
33
+ clusters = st.sidebar.slider("Clusters", 2, 5, 3)
34
+ X, y = make_blobs(n_samples=n_samples, centers=clusters, n_features=2, random_state=23)
35
+
36
+ else: # Moons
37
+ n_samples = st.sidebar.slider("Samples", 500, 5000, 2000)
38
+ noise = st.sidebar.slider("Noise", 0.0, 0.5, 0.2)
39
+ X, y = make_moons(n_samples=n_samples, noise=noise, random_state=23)
40
+
41
+ # Split dataset
42
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=23)
43
+
44
+ # KNN Parameters
45
+ st.sidebar.subheader("βš™οΈ KNN Parameters")
46
+ n_neighbors = st.sidebar.slider("Neighbors (k)", 1, 15, 3)
47
+ weights = st.sidebar.selectbox("Weights", ["uniform", "distance"])
48
+ p = st.sidebar.selectbox("p (Minkowski)", [1, 2])
49
+
50
+ # Train KNN
51
+ knn = KNeighborsClassifier(n_neighbors=n_neighbors, weights=weights, p=p, metric='minkowski')
52
+ knn.fit(X_train, y_train)
53
+ y_pred = knn.predict(X_test)
54
+ accuracy = accuracy_score(y_test, y_pred)
55
+ f1=f1_score(y_test,y_pred)
56
+
57
+ # Display results
58
+ st.subheader("πŸ“Š Model Accuracy")
59
+ st.write(f"**Accuracy Score: {accuracy:.4f}**")
60
+
61
+ st.subheader("πŸ“Š Model F1-Score")
62
+ st.write(f"**F1 Score: {f1:.4f}**")
63
+
64
+ fig, ax = plt.subplots(figsize=(6, 4))
65
+ plot_learning_curves(X_train, y_train, X_test, y_test, knn, scoring='accuracy')
66
+ st.subheader("πŸ“ˆ Learning Curve")
67
+ st.pyplot(fig)
68
+
69
+ fig, ax = plt.subplots(figsize=(6, 4))
70
+ knn.fit(X, y)
71
+ plot_decision_regions(X, y, knn)
72
+ st.subheader("πŸ”· Decision Boundary")
73
+ st.pyplot(fig)