0


1.k-近邻算法(KNN)

概念

在这里插入图片描述
根据你的“邻居”判断你的类别
在这里插入图片描述

流程

在这里插入图片描述

KNN api 初步使用

机器学习流程

在这里插入图片描述

Scikit-learn工具

在这里插入图片描述

安装

pip3 install scikit-learn==0.19.1

注:需要Numpy,Scipy等库的支持
Python (>= 3.5),
NumPy (>= 1.11.0),
SciPy (>= 0.17.0),
joblib (>= 0.11).

检验安装

import sklearn

Scikit-learn包含内容

在这里插入图片描述

K-近邻算法API

在这里插入图片描述

测试

from sklearn.neighbors import KNeighborsClassifier

# 构造数据
x =[[1],[5],[10],[20]]
y =[2,2,6,6]# 训练模型# 实例化估计器对象
estimator = KNeighborsClassifier(n_neighbors=1)# 调用fit方法 进行训练
estimator.fit(x, y)# 数据预测
ret = estimator.predict([[2]])print(ret)

ret = estimator.predict([[30]])print(ret)

在这里插入图片描述

K值的选择

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

k近邻搜索算法

在这里插入图片描述

KD树

why

在这里插入图片描述

what

在这里插入图片描述

how

在这里插入图片描述
在这里插入图片描述

树的建立

在这里插入图片描述

  • 多个维度,选择最分散的一个维度排序、取中位数进行第一次划分(这里选择x轴)
  • 根据第一次选择的维度的中位数进行左右划分(2、4、5 | 8、9),将对应的另一维度数值进行排序、取中位数划分
  • 重复上两步,直到无法划分在这里插入图片描述

在这里插入图片描述

最近领域搜索

在这里插入图片描述

例:查(2.1,3.1)

在这里插入图片描述

例:查(2,4.5)

在这里插入图片描述

KD树总结

在这里插入图片描述

scikit-learn 数据集

在这里插入图片描述

sklearn小数据集

在这里插入图片描述

sklearn大数据集

在这里插入图片描述

sklearn 数据集返回值介绍

在这里插入图片描述

from sklearn.datasets import load_iris,fetch_20newsgroups

# 小数据集获取
iris = load_iris()# print(iris)# 大数据集获取# news = fetch_20newsgroups()# print(news)# 数据集属性描述print("数据集特征值是:\n", iris.data)print("数据集目标值是:\n", iris["target"])print("数据集特征值名字是:\n", iris.feature_names)print("数据集目标值名字是:\n", iris.target_names)print("数据集描述是:\n", iris.DESCR)

在这里插入图片描述

数据可视化

在这里插入图片描述

from sklearn.datasets import load_iris, fetch_20newsgroups
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from pylab import mpl

# 设置显示中文字体
mpl.rcParams['font.sans-serif']=["SimHei"]# 设置正常显示符号
mpl.rcParams['axes.unicode_minus']=False# 小数据集获取
iris = load_iris()# 数据可视化
iris_d = pd.DataFrame(data=iris.data, columns=["Sepal_Length","Sepal_Width","Petal_length","Petal_Width"])print(iris_d)
iris_d["target"]= iris.target

defiris_plot(data, col1, col2):
    sns.lmplot(x=col1, y=col2, data=data,hue="target",fit_reg=False)
    plt.xlabel(col1)
    plt.ylabel(col2)
    plt.title("种类分布图")
    plt.show()

iris_plot(iris_d,"Sepal_Width","Petal_Length")

在这里插入图片描述

在这里插入图片描述

数据集划分

在这里插入图片描述

from sklearn.datasets import load_iris, fetch_20newsgroups
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22, test_size=0.2)print("训练集的特征值是:\n", x_train)print("训练集的目标值是:\n", y_train)print("测试集的特征值是:\n", x_test)print("测试集的目标值是:\n", y_test)

x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=2, test_size=0.2)print("测试集的目标值是:\n", y_test)print("测试集1的目标值是:\n", y_test1)

在这里插入图片描述

特征预处理

在这里插入图片描述

归一化

在这里插入图片描述

公式

在这里插入图片描述
在这里插入图片描述

api

在这里插入图片描述

标准化

在这里插入图片描述

公式

在这里插入图片描述
在这里插入图片描述

api

在这里插入图片描述

预处理总结

在这里插入图片描述

案例:鸢尾花种类预测

数据集介绍

在这里插入图片描述

# @Author : CG# @File : 03-鸢尾花种类预测.py# @Time : 2022/2/8 17:19# @contact: [email protected] sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 1.获取数据集
iris = load_iris()# 2.数据基本处理 不同的random_state将导致训练集和测试集的不同,进而导致最终准确率不同
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)# 3.特征工程
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)#fit(): 用来计算mean(均值)和std(标准差),以便后面进行数据的标准化#transform(): 根据fit()函数计算的mean和std对数据进行标准化#fit_transform(): 是fit()函数和transform()函数的组合,先进行fit,之后再进行transform(标准化)# fit_transform方法是fit和transform的结合,# fit_transform(X_train) 意思是找出X_train的平均值和标准差,并应用在X_train上。# 这时对于X_test,我们就可以直接使用transform方法。# 因为此时StandardScaler已经保存了X_train的平均值和标准差。#因为我们必须保证,测试集在进行标准化的时候,使用的是统一的缩放参数,即为均值和标准差。所以先使用fit_transform()在训练集上,再使用transform()在测试集上。# 4.机器学习(模型训练)knn# 实例化估计器
estimator = KNeighborsClassifier(n_neighbors=5)# 模型训练
estimator.fit(x_train, y_train)# 5.模型评估# 预测值结果输出
y_pre = estimator.predict(x_test)print("预测值是:\n", y_pre)print("预测值与真实值的对别是:\n", y_pre == y_test)# 准确率计算  
score = estimator.score(x_test, y_test)print(score)

在这里插入图片描述

KNN算法总结

优点

在这里插入图片描述

缺点

在这里插入图片描述

交叉验证,网格搜索

什么是交叉验证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

什么是网格搜索

在这里插入图片描述

交叉验证,网格搜索(模型选择与调优)API

在这里插入图片描述

# @Author : CG# @File : 03-鸢尾花种类预测.py# @Time : 2022/2/8 17:19# @contact: [email protected] sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 1.获取数据集
iris = load_iris()# 2.数据基本处理
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)# 3.特征工程
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)#fit(): 用来计算mean(均值)和std(标准差),以便后面进行数据的标准化#transform(): 根据fit()函数计算的mean和std对数据进行标准化#fit_transform(): 是fit()函数和transform()函数的组合,先进行fit,之后再进行transform(标准化)# fit_transform方法是fit和transform的结合,# fit_transform(X_train) 意思是找出X_train的平均值和标准差,并应用在X_train上。# 这时对于X_test,我们就可以直接使用transform方法。# 因为此时StandardScaler已经保存了X_train的平均值和标准差。#因为我们必须保证,测试集在进行标准化的时候,使用的是统一的缩放参数,即为均值和标准差。所以先使用fit_transform()在训练集上,再使用transform()在测试集上。# 4.机器学习(模型训练)knn# 实例化估计器
estimator = KNeighborsClassifier(n_neighbors=5)# 模型调优 - 交叉验证,网格搜索
param_grid ={"n_neighbors":[1,3,5,7]}
estimator = GridSearchCV(estimator, param_grid=param_grid, cv=5)# 模型训练
estimator.fit(x_train, y_train)# 5.模型评估# 预测值结果输出
y_pre = estimator.predict(x_test)print("预测值是:\n", y_pre)print("预测值与真实值的对别是:\n", y_pre == y_test)# 准确率计算
score = estimator.score(x_test, y_test)print(score)# 交叉验证、网格搜索结果print("交叉验证、网格搜索的最好结果是:\n", estimator.best_score_)print("交叉验证、网格搜索的最好模型是:\n", estimator.best_estimator_)print("交叉验证、网格搜索的模型结果是:\n", estimator.cv_results_)

在这里插入图片描述

常见距离公式

欧式距离

在这里插入图片描述

曼哈顿距离

在这里插入图片描述

切比雪夫距离

在这里插入图片描述

闵可夫斯基距离

在这里插入图片描述

常见距离小结

在这里插入图片描述

其他距离公式

标准化欧式距离

在这里插入图片描述

余弦距离

在这里插入图片描述

汉明距离

在这里插入图片描述
在这里插入图片描述

杰卡德距离

在这里插入图片描述

马氏距离

在这里插入图片描述


本文转载自: https://blog.csdn.net/weixin_50973728/article/details/122821667
版权归原作者 CGOMG 所有, 如有侵权,请联系我们删除。

“1.k-近邻算法(KNN)”的评论:

还没有评论