# ライブラリの読み込み
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
# irisデータの読み込み
df = sns.load_dataset("iris")
# 説明変数と目的変数に分ける
df_x = df.drop('species', axis=1)
df_y = df['species']
#学習データをテストデータを分割
train_x, test_x, train_y, test_y = train_test_split(df_x, df_y, test_size=0.5)
#モデル学習
model = KNeighborsClassifier(n_neighbors=50)
model.fit(train_x, train_y)
# 予測値を算出
pred_y = model.predict(test_x)
# 正解率を表示
print(model.score(test_x, test_y))
# 混合行列を算出
print(confusion_matrix(pred_y, test_y))
0.6
[[20 4 0]
[ 0 2 0]
[ 0 26 23]]
おそらく最終的な精度が著しく悪くなったはずです。
同じく最終的なアウトプットの値はサンプリングの仕方によって変わるのでピッタリ一緒でなくて問題ないです。
k近傍法のkの値が50ということは近傍の50個のデータから所属するクラスを判断することになります。
この時、全サンプルが75サンプルなので50個の近傍となると全体のほとんどのサンプルを参考にすることになるので精度が下がったことが納得できると思います。