Как исправить ошибку, чтобы я мог реализовать машину больцмена?
Я написал простой скрипт, который должен обучиться на основе моего датасета, получать данные, и отдавать самый близкий к ним результат. Вот мой основной код:
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.neighbors import NearestNeighbors
# загрузить данные
data = pd.read_csv("dataset.csv", delimiter=";")
# разделить признаки и метки
X = data.drop(columns=["diagnosis"])
y = data["diagnosis"]
# преобразовать категориальные признаки в числовые
le = LabelEncoder()
X["gender"] = le.fit_transform(X["gender"])
X["allergy"] = le.fit_transform(X["allergy"])
X["complication"] = le.fit_transform(X["complication"])
X["difficulty"] = le.fit_transform(X["difficulty"])
# проверить, есть ли новые значения, которых нет в данных для обучения
new_data = pd.DataFrame({
"age": [20, 30, 40],
"gender": ["Male", "Female", "Female"],
"allergy": ["None", "Penicillin", "None"],
"complication": ["None", "None", "Diabetes"],
"difficulty": ["Easy", "Medium", "Hard"]
})
for col in new_data.select_dtypes(include=["object"]).columns:
unseen = set(new_data[col]) - set(le.classes_)
if len(unseen) > 0:
raise ValueError(f"The following unseen values were found in column '{col}': {unseen}")
# преобразовать категориальные признаки в числовые
new_data["gender"] = le.transform(new_data["gender"])
new_data["allergy"] = le.transform(new_data["allergy"])
new_data["complication"] = le.transform(new_data["complication"])
new_data["difficulty"] = le.transform(new_data["difficulty"])
# преобразовать категориальные признаки в числовые
for col in new_data.select_dtypes(include=["object"]).columns:
new_data[col] = le.transform(new_data[col])
# проверить, есть ли новые значения, которых нет в данных для обучения
for col in new_data.select_dtypes(include=["object"]).columns:
unseen = set(new_data[col]) - set(le.classes_)
if len(unseen) > 0:
raise ValueError(f"The following unseen values were found in column '{col}': {unseen}")
# добавить новые данные в исходный набор данных
X = pd.concat([X, new_data], ignore_index=True)
# преобразовать категориальные признаки в числовые
for col in X.select_dtypes(include=["object"]).columns:
X[col] = le.fit_transform(X[col])
# инициализировать модель KNN
model = NearestNeighbors(n_neighbors=3)
# обучить модель на данных
model.fit(X)
# получить ближайших соседей для новых данных
distances, indices = model.kneighbors(X[new_data_indices])
# вывести результат
for i, neighbors in enumerate(indices):
print(f"Nearest neighbors for new data point {i + 1}:")
for neighbor in neighbors:
print(data.iloc[neighbor])
print()
А вот мой датасет:
age;gender;allergy;complication;difficulty;diagnosis
1;Test;Test;Test;Test;Test
2;Test;Test;Test;Test;Test
3;Test;Test;Test;Test;Test
4;Test;Test;Test;Test;Test
5;Test;Test;Test;Test;Test
6;Test;Test;Test;Test;Test
7;Test;Test;Test;Test;Test
8;Test;Test;Test;Test;Test
9;Test;Test;Test;Test;Test
10;Test;Test;Test;Test;Test
18;Female;Отсутствует;None;Easy;Diabetes
22;Male;Penicillin;None;Medium;Diabetes
45;Female;Отсутствует;Diabetes;Hard;Diabetes
10;Female;Отсутствует;Diabetes;Hard;Diabetes
30;Male;Отсутствует;Asthma;Medium;Diabetes
55;Female;Sulfa;None;Hard;Diabetes
Как исправить ошибку:
Traceback (most recent call last):
File "test.py", line 30, in <module>
raise ValueError(f"The following unseen values were found: {unseen}")
ValueError: The following unseen values were found: {'Diabetes', 40, 'Penicillin', 'None', 20, 'Female', 'Male', 30}