一、 距离计算方法

在机器学习中,距离计算是一个非常重要的概念,它用于衡量样本之间的相似性。常见的距离计算方法有以下几种:

  • 欧式距离:两个样本间所有维度差的平方和再开方。公式表示为:对于两个样本 x = ( x 1 , x 2 , ⋯   , x n ) x=(x_1,x_2,\cdots,x_n) x=(x1,x2,,xn) y = ( y 1 , y 2 , ⋯   , y n ) y=(y_1,y_2,\cdots,y_n) y=(y1,y2,,yn),欧式距离 d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x,y)=\sqrt{\sum_{i = 1}^{n}(x_i - y_i)^2} d(x,y)=i=1n(xiyi)2

  • 曼哈顿距离:两个样本间所有维度差的绝对值相加。公式为: d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ d(x,y)=\sum_{i = 1}^{n}|x_i - y_i| d(x,y)=i=1nxiyi

  • 切比雪夫距离:两个样本间所有维度差的最大值。即 d ( x , y ) = max ⁡ i = 1 n ∣ x i − y i ∣ d(x,y)=\max_{i = 1}^{n}|x_i - y_i| d(x,y)=maxi=1nxiyi

二、 归一化和标准化

在处理数据时,为了让机器学习算法效果更好,常常需要对数据进行预处理。常见的预处理方法有归一化和标准化。

  • 2.1 归一化

    • 方法:导入sklearn.preprocessing里的MinMaxScaler,创建归一化对象,分别对x_trainx_test使用fit_transformtransform

    • 作用:通过对原始数据进行变换把数据映射到【mi,mx】(默认为 [0,1]) 之间。

    • 公式 X scaled = X − X min X max − X min X_{\text{scaled}} = \frac{X - X_{\text{min}}}{X_{\text{max}} - X_{\text{min}}} Xscaled=XmaxXminXXmin

      其中, X min X_{\text{min}} Xmin X max X_{\text{max}} Xmax分别为特征的最小值和最大值。

    • 适用场景:适用于数据分布不呈正态、存在明显边界或对输入范围敏感的场景。

from sklearn.preprocessing import MinMaxScaler
import numpy as np

# 示例数据
X = np.array([[1, 2], [3, 4], [5, 6]])
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
print(X_scaled)
  • 2.2 标准化

    • 方法:导入sklearn.preprocessing里的StandardScaler,创建标准化对象,分别对x_trainx_test使用fit_transformtransform

    • 作用:通过对原始数据进行标准化,转换为均值为 0 标准差为 1 的标准正态分布的数据。

    • 公式 X scaled = X − μ σ X_{\text{scaled}} = \frac{X - \mu}{\sigma} Xscaled=σXμ

      其中, μ \mu μ为特征的均值, σ \sigma σ为特征的标准差。

    • 适用场景:适用于数据分布接近正态分布或存在离群点的场景。

from sklearn.preprocessing import StandardScaler
import numpy as np

# 示例数据
X = np.array([[1, 2], [3, 4], [5, 6]])
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print(X_scaled)

三、 交叉验证和网格搜索

  • 交叉验证:是划分数据集的一种方法,目的是为了得到更加准确可信的模型评分,评估模型在未知数据上的表现,避免一次划分数据造成的偶然性。

  • 网格搜索:能够自动寻找最优的超参数组合,它枚举所有指定的超参数组合,并返回验证得到的最优组合。两者结合形成一个模型参数调优的解决方案,用于模型开发阶段的调参优化,提高泛化能力。

from sklearn.model_selection import GridSearchCV, cross_val_score​
from sklearn.neighbors import KNeighborsClassifier​
from sklearn.datasets import load_iris​
import numpy as np​
​
# 加载数据集​
iris = load_iris()​
X = iris.data​
y = iris.target​
​
# 定义参数网格​
param_grid = {'n_neighbors': np.arange(1, 20)}​
​
# 创建KNN分类器​
knn = KNeighborsClassifier()​
​
# 创建网格搜索对象​
grid_search = GridSearchCV(knn, param_grid, cv=5)​
​
# 进行网格搜索​
grid_search.fit(X, y)​
​
# 输出最优参数​
print("Best parameters: ", grid_search.best_params_)
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐