File size: 2,603 Bytes
0404b49
 
 
3891746
0404b49
92c9ccb
0404b49
 
 
 
 
 
 
 
 
 
 
 
92c9ccb
 
 
 
4fdac11
a7bff9b
4fdac11
a7bff9b
92c9ccb
 
4fdac11
0404b49
4fdac11
0404b49
4fdac11
 
0404b49
 
3891746
 
 
 
 
 
 
 
 
2d064e0
3891746
 
 
 
 
 
 
0404b49
 
 
92c9ccb
4fdac11
0404b49
 
 
92c9ccb
 
4fdac11
92c9ccb
0404b49
4fdac11
0404b49
3891746
 
 
0404b49
 
4fdac11
92c9ccb
0404b49
 
 
 
 
 
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
import streamlit as st
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt

def get_user_data_train():
    data_points = []
    labels = []

    for i in range(5):
        x = st.number_input(f"Enter x-coordinate for data point {i + 1}:")
        y = st.number_input(f"Enter y-coordinate for data point {i + 1}:")
        label = st.text_input(f"Enter label for data point {i + 1}:")

        data_points.append([x, y])
        labels.append(label)

    return np.array(data_points), np.array(labels)
    
def get_user_data_test():
    data_points = []

    for i in range(1, 2, 1):
        x = st.number_input(f"Enter x-coordinate for test data point {i + 1}:")
        y = st.number_input(f"Enter y-coordinate for test data point {i + 1}:")
        
        data_points.append([x, y])

    return np.array(data_points)

def knn_classification(X_train, y_train, X_test, k_value):
    knn_classifier = KNeighborsClassifier(n_neighbors=k_value)
    knn_classifier.fit(X_train, y_train)
    predictions = knn_classifier.predict(X_test)
    return predictions

def plot_training_and_test_data(X_train, y_train, X_test, predictions):
    unique_labels = np.unique(y_train)

    # Plot training data
    for label in unique_labels:
        indices = np.where(y_train == label)
        plt.scatter(X_train[indices, 0], X_train[indices, 1], label=f'Training ({label})')

    # Plot test data with predicted labels
    plt.scatter(X_test[:, 0], X_test[:, 1], label=f'Test (Predicted Labels)', marker='x', c=predictions)

    plt.xlabel('X-coordinate')
    plt.ylabel('Y-coordinate')
    plt.title('Training and Test Data with Predicted Labels')
    plt.legend()
    st.pyplot()

def main():
    st.title("K-Nearest Neighbor Classification App")

    # Get user-defined data train
    X_train, y_train = get_user_data_train()

    # Choose the value of k
    k_value = st.slider("Choose the value of k for k-nearest neighbors:", min_value=1, max_value=10, value=3)
    
    # Get user-defined data test
    X_test = get_user_data_test()
    
    # Perform k-nearest neighbor classification
    predictions = knn_classification(X_train, y_train, X_test, k_value)

    # Plot training and test data
    plot_training_and_test_data(X_train, y_train, X_test, predictions)

    # Display results
    st.subheader("Results:")
    st.write("User-defined Data Points for Testing:")
    st.write(X_test)
    st.write(f"\nK-Nearest Neighbor Classification (k={k_value}):")
    st.write("Predicted Labels:")
    st.write(predictions)

if __name__ == "__main__":
    main()