|
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) |
|
|
|
|
|
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})') |
|
|
|
|
|
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") |
|
|
|
|
|
X_train, y_train = get_user_data_train() |
|
|
|
|
|
k_value = st.slider("Choose the value of k for k-nearest neighbors:", min_value=1, max_value=10, value=3) |
|
|
|
|
|
X_test = get_user_data_test() |
|
|
|
|
|
predictions = knn_classification(X_train, y_train, X_test, k_value) |
|
|
|
|
|
plot_training_and_test_data(X_train, y_train, X_test, predictions) |
|
|
|
|
|
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() |
|
|