ggscatter(
anxiety, x = “pretest”, y = “posttest”,
color = “group”, add = “reg.line”
)+
stat_regline_equation(
aes(label = paste(..eq.label.., ..rr.label.., sep = ”~~~~”), color = group)
)

- 需要调参
- 合适的距离矩阵 python中 metric 距离度量/ p距离的幂   dist_power(R中)
- 距离是否加权
 
   

● metric=(sklearn)
“minkowski”(默认)
● p=(sklearn)
Minkowski 距离的幂:p = 1 → Manhattan p = 2 → Euclidean
💡 当特征尺度差异大或含异常值时,Manhattan(p=1)往往更稳健。
● 权重:距离加权(weights / weight_func) ⭐⭐⭐
sklearn 的权重(简单)

“uniform”:所有邻居权重相同

“distance”:近的更重要

callable:自定义函数

tidymodels/kknn 的 weight_func=(更丰富)

“rectangular”(等权 = uniform)

填充

分类

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
 
# 1. 加载数据
iris = load_iris()
X = iris.data      # 特征
y = iris.target    # 标签
 
# 2. 划分训练/测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)
 
# 3. 建立 KNN 分类器
knn = KNeighborsClassifier(n_neighbors=5)
 
# 4. 训练模型
knn.fit(X_train, y_train)
 
# 5. 预测
y_pred = knn.predict(X_test)
 
# 6. 评估
print("Accuracy:", accuracy_score(y_test, y_pred))
 

回归

from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error
 
# 1. 加载数据
data = fetch_california_housing()
X = data.data
y = data.target
 
# 2. 划分训练/测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)
 
# 3. 建立 KNN 回归模型
knn = KNeighborsRegressor(n_neighbors=5)
 
# 4. 训练
knn.fit(X_train, y_train)
 
# 5. 预测
y_pred = knn.predict(X_test)
 
# 6. 评估
mse = mean_squared_error(y_test, y_pred)
print("MSE:", mse)
 

R实现

library(tidymodels)
 
knn_spec <- nearest_neighbor(
	mode = "classification",
	neighbors = 5,
	weight_func = "rectangular",
	dist_power = 2
) %>%
	set_engine("kknn")
 
knn_fit <- 
	knn_spec %>% 
	fit(Species ~ ., data = iris)
 
predict(knn_fit, iris)