本文介绍: 一、原理参数k的确定带权重的k近邻算法模糊k近邻算法KNN算法用于回归问题使用欧氏距离时应将特征向量归一化mahalanobis距离如何确定数据的协方差矩阵Bhattacharyya距离距离度量学习距离度量学习大边界最近邻分类二、示例代码1import numpy as np # 导入numpy库,用于行数计算import matplotlib.pyplot as plt # 导…

48aa176b3c984fc71a8bd6fc7b96186d.jpeg

一、原理

参数k的确定

0c5ba281b6a32f64f4b40a3c02f3fff4.png

带权重的k近邻算法 与 模糊k近邻算法

4ab51431ea32da5e4dbaad957c9dc88e.jpeg

KNN算法用于回归问题

3f3159fafa95659466ae30432d50b975.jpeg

使用欧氏距离时应将特征向量归一化

63f1ddbcc07b497f0455a906aa2b3432.jpeg

mahalanobis距离

4d2059f46c80199474795364cc8a80a5.png

如何确定数据的协方差矩阵

0400e2703bd073453b0a4d0b145410fa.jpeg

Bhattacharyya距离

5274f0886101c23b3f2158f19ba42a50.jpeg

距离度量学习

81fbc5e89287218d3da9d949afef6c63.jpeg

距离度量学习大边界最近邻分类

d9146cae0c24bf56a651b9a1025e208f.jpeg

二、示例代码1

9f172c955e03d6b6eec3baad64938a6c.jpeg

import numpy as np  # 导入numpy库,用于行数计算
import matplotlib.pyplot as plt  # 导入matplotlib库的pyplot模块用于绘制图形
from sklearn import datasets  # 导入sklearn库的datasets模块用于加载数据集
from sklearn.neighbors import KNeighborsClassifier  # 导入sklearn库的neighbors模块中的KNeighborsClassifier类,用于创建k近邻分类器
import matplotlib  # 导入matplotlib库,用于图形绘制


#%matplotlib inline  # 这是一个Jupyter Notebook的魔法命令,用于在Notebook中直接显示图形


# 定义一个函数,用于生成所有测试样本def make_meshgrid(x, y, h=.02):
    x_min, x_max = x.min() - 1, x.max() + 1  # 计算x最小值最大值
    y_min, y_max = y.min() - 1, y.max() + 1  # 计算y的最小值最大值
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))  # 生成网格return xx, yy  # 返回网格点


# 定义一个函数,对测试样本进行预测,并显示
def plot_test_results(ax, clf, xx, yy, **params):
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])  # 对测试样本进行预测
    Z = Z.reshape(xx.shape)  # 调整预测结果的形状
    ax.contourf(xx, yy, Z, **params)  # 绘制等高线图


# 载入iris数据集
iris = datasets.load_iris()
# 只使用前面两个特征
X = iris.data[:, :2]
# 样本标签值
y = iris.target


# 创建kNN分类器
knn = KNeighborsClassifier() 
knn.fit(X,y)  # 对分类器进行训练


title = ('KNNClassifier')


fig, ax = plt.subplots(figsize = (5, 5))  # 创建一个新的图形窗口
plt.subplots_adjust(wspace=0.4, hspace=0.4)  # 调整子图之间的间距


X0, X1 = X[:, 0], X[:, 1]  # 提取特征值
# 生成所有测试样本点
xx, yy = make_meshgrid(X0, X1)


# 显示测试样本的分类结果
plot_test_results(ax, knn, xx, yy, cmap=plt.cm.coolwarm, alpha=0.8)
# 显示训练样本
ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors='k')
ax.set_xlim(xx.min(), xx.max())  # 设置x轴的范围
ax.set_ylim(yy.min(), yy.max())  # 设置y轴的范围
ax.set_xlabel('x1')  # 设置x轴的标签
ax.set_ylabel('x2')  # 设置y轴的标签
ax.set_xticks(())  # 清空x轴的刻度
ax.set_yticks(())  # 清空y轴的刻度
ax.set_title(title)  # 设置标题
plt.show()  # 显示图形

三、示例代码2

1fdd4d0b9eee8d4964295c8b10e820ff.png

数据集

b6236230551f0d429b557163468f23f4.jpeg

输出的混淆矩阵和分类报告

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd


# 导入数据集   注意,Python索引是从 0 开始的。
dataset = pd.read_csv('../datasets/Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values  # 获取数据集中的第3列和第4列数据 年龄 薪水,并将其转换为NumPy数组
y = dataset.iloc[:, 4].values  # 获取数据集中的第4列数据 是否购买,并将其转换为NumPy数组


# 将数据集划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)  # 将数据集划分为75%的训练集和25%的测试集


# 特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()  # 创建标准化对象
X_train = sc.fit_transform(X_train)  # 对训练集进行标准化
X_test = sc.transform(X_test)  # 对测试集进行标准化


# 使用K-NN算法训练模型
from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2)  # 创建K-NN分类器,设置参数n_neighbors为5,metric为闵可夫斯基距离,p为2
classifier.fit(X_train, y_train)  # 使用训练训练模型


# 使用训练好的模型预测测试集结果
y_pred = classifier.predict(X_test)  # 使用训练好的模型预测测试集的结果


# 生成混淆矩阵
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
cm = confusion_matrix(y_test, y_pred)  # 生成混淆矩阵
print(cm)  # 打印混淆矩阵
print(classification_report(y_test, y_pred))  # 打印分类报告

83e63db6a382c81f41bc186eb5a49666.jpeg

baf66d88ae46bae2ea0af5e5cc49c19b.png

参考

https://github.com/noobgod/100-Days-Of-ML-Code 

机器学习-原理、算法与应用》,清华大学出版社,雷明著

The End

原文地址:https://blog.csdn.net/cxyhjl/article/details/134658183

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_4297.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注