Das vorherige hat den Unterschied zwischen den beiden ** Arten von Gewichtungsfunktionen einheitlich und Abstand ** in der * k-Nachbarschaftsmethode visuell erfasst.
import numpy as np
import pandas as pd
#sklearn-basierte Bibliotheken
from sklearn import datasets #Datensatz
from sklearn.model_selection import train_test_split #Datenaufteilung
from sklearn.neighbors import KNeighborsClassifier #Klassifizierungsmodell
from sklearn.neighbors import KNeighborsRegressor #Regressionsmodell
#Matplotlib-basierte Bibliotheken
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
!pip install japanize-matplotlib #Japanisches Display-kompatibles Modul
import japanize_matplotlib
#Datensatz abrufen
boston = datasets.load_boston()
#Extrahieren Sie erklärende Variablen und objektive Variablen
X = boston.data[:, 5].reshape(len(boston.data), 1)
y = (boston.target).reshape(len(boston.target), 1)
#Datenaufteilung für Training / Test
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)
#k Parameter
n_neighbors = 14
#Variable, die die Genauigkeitsrate speichert
score = []
for w in ['uniform', 'distance']:
#Modellgenerierung
model = KNeighborsRegressor(n_neighbors, weights=w)
model = model.fit(X_train, y_train)
#Richtige Antwortrate der Trainingsdaten
r_train = model.score(X_train, y_train)
score.append(r_train)
#Richtige Antwortrate der Testdaten
r_test = model.score(X_test, y_test)
score.append(r_test)
#In einem Datenrahmen dargestellt
score = np.array(score)
pd.DataFrame(score.reshape(2,2),
columns = ['train', 'test'],
index = ['uniform', 'distance'])
#k Parameter
n_neighbors = 14
#Instanzgenerierung
model_u = KNeighborsRegressor(n_neighbors, weights='uniform')
model_d = KNeighborsRegressor(n_neighbors, weights='distance')
#Modellgenerierung
model_u = model_u.fit(X_train, y_train)
model_d = model_d.fit(X_train, y_train)
#Prognose
y_u = model_u.predict(X_test)
y_d = model_d.predict(X_test)
plt.figure(figsize=(14,6))
#Streudiagramm
plt.scatter(X_test, y_u, color='slateblue', lw=1, label='Voraussichtlicher Wert(uniform)')
plt.scatter(X_test, y_d, color='tomato', lw=1, label='Voraussichtlicher Wert(distance)')
plt.scatter(X_test, y_test, color='lightgrey', label='Gemessener Wert(test)')
plt.legend(fontsize=15)
plt.xlim(3, 9.5)
plt.show()
#Datensatz abrufen
iris = datasets.load_iris()
#Extrahieren Sie nur erklärende Variablen und objektive Variablen
X = iris.data[:, :2]
y = iris.target
y = y.reshape(-1, 1) #Formkonvertierung
#Stellen Sie jede Variable ein, nachdem Sie nur 2 Werte extrahiert haben
data = np.hstack([X, y]) # X,Kombiniere y
data = data[data[:, 2] != 0] #Extrahieren Sie nur 2 Werte
X = data[:, :2]
y = data[:, -1]
#Datenaufteilung
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify = y, random_state = 0)
#k Parameter
n_neighbors = 15
#Variable, die die Genauigkeitsrate speichert
score = []
for i, w in enumerate(['uniform', 'distance']):
#Modellgenerierung
model = KNeighborsClassifier(n_neighbors, weights=w)
model = model.fit(X_train, y_train)
#Trainingsdaten
r_train = model.score(X_train, y_train)
score.append(r_train)
#Testdaten
r_test = model.score(X_test, y_test)
score.append(r_test)
#In einem Datenrahmen dargestellt
score = np.array(score)
pd.DataFrame(score.reshape(2,2),
columns = ['train', 'test'],
index = ['uniform', 'distance'])
#k Parameter
n_neighbors = 15
#Maschenabstand
h = 0.02
#Generieren Sie eine Farbkarte für die Zuordnung
cmap_surface = ListedColormap(['mistyrose', 'lightcyan'])
cmap_dot = ListedColormap(['tomato', 'slateblue'])
plt.figure(figsize=(18,6))
for j, w in enumerate(['uniform', 'distance']):
#Modell generieren
model = KNeighborsClassifier(n_neighbors, weights = w)
model = model.fit(X_train, y_train)
#Testdaten einstellen
X, y = X_test, y_test
# x,Ermitteln Sie die Minimal- und Maximalwerte der y-Achse
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
#Generieren Sie Rasterspalten in festgelegten Netzintervallen
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
#Vorhersage durch Übergabe der Gittersequenz an das Modell
z = np.c_[xx.ravel(), yy.ravel()] #Auf eine Dimension reduzieren und dann verbinden
Z = model.predict(z) #Prognose
Z = Z.reshape(xx.shape) #Formkonvertierung
#Zeichnung
plt.subplot(1, 2, j + 1)
plt.pcolormesh(xx, yy, Z, cmap=cmap_surface) #Farbdiagramm
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_dot, s=30)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xlabel('Die Länge des Stückes', fontsize=12)
plt.ylabel('Breite des Stückes', fontsize=12)
plt.title("'%s'" % (w), fontsize=18)
plt.show()