import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import MinMaxScaler
from sklearn.neighbors import KNeighborsClassifier
egitim_data = pd.read_excel(r'C:\Users\memo3\OneDrive\Masaüstü\Min-MaxNormalizasyonluEgitimDatalari.xlsx')
X_train = egitim_data.drop('Label', axis=1)
y_train = egitim_data['Label']
test_data = pd.read_excel(r'C:\Users\memo3\OneDrive\Masaüstü\Min-MaxNormalizasyonluTestDatalari.xlsx')
X_test = test_data.drop('Label', axis=1)
y_test = test_data['Label']
scaler = MinMaxScaler()
X_train_normalized = scaler.fit_transform(X_train)
X_test_normalized = scaler.transform(X_test)
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
X_train_imputed = imputer.fit_transform(X_train_normalized)
X_test_imputed = imputer.transform(X_test_normalized)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train_imputed, y_train)
accuracy = knn.score(X_test_imputed, y_test)
print("Model accuracy:", accuracy)
C:\Users\memo3\PycharmProjects\KNNModel\.venv\Scripts\python.exe C:\Users\memo3\PycharmProjects\KNNModel\main.py
Model accuracy: 0.4527777777777778
Process finished with exit code 0
我正在尝试在 PyCharm 中使用 Python 语言编写机器学习代码。但我认为该代码并未采用我拥有的 Excel 数据中的所有类特征(Excel 中有 15 列表示数据的特征),当我运行代码时,我得到的准确度分数较低,如下所示。我想要分类的目标列是“标签”列,但是它不需要使用数据的所有属性来做到这一点吗?我应该在代码中添加什么或者代码中错误的地方在哪里?
我会首先检查训练数据的准确性。如果很高,那么你就过度拟合了,你可以尝试增加
n_neighbors
中KNeighborsClassifier
参数的值。如果这个值也很低,那么也许你的问题不太适合 KNN,至少在默认的距离选择和你应用的缩放情况下是这样。
默认情况下,KNN 使用观测值之间的欧几里德距离。这对你来说有意义吗?如果是这样,您应该意识到缩放(如 MinMaxScaling)会更改这些距离。因此,可能值得在不进行缩放的情况下检查准确性(可能您需要了解数据并使用这些知识来缩放坐标以使 KNN 正常工作)。
首先尝试一些基本的线性基线也是一个好主意,它们对坐标缩放不敏感。例如,检查
sklearn.linear_model.LogisticRegression
的准确性(与它的名字所暗示的不同,它是一个分类器)。