ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

K近邻算法(KNN)

2021-09-17 21:01:36  阅读:180  来源: 互联网

标签:KNN iris 近邻 test 算法 train print import data


1.简介

机器学习流程

1.获取数据集
2.数据基本处理
3.特征工程
4.机器学习
5.模型评估

 Scikit-learn工具

安装

pip3 install scikit-learn

查看是否安装成功

import sklearn

API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数

 简单使用

from sklearn.neighbors import KNeighborsClassifier

# 可以把x理解为 excel 表格中一列,每一行就是一个样本
# 只不过这里样本比较简单,只是一维的

x = [[0],
     [1],
     [2],
     [3]]
y = [0, 0, 1, 1]

# 实例化API
estimator = KNeighborsClassifier(n_neighbors=1)
# 使用fit方法进行训练\
# fit函数需要传递两个值,一个特征值,一个目标值
estimator.fit(x, y)

# predict 预测函数
print(estimator.predict([
    [1],
    [100]
]))

常见距离公式 

欧式距离

曼哈顿距离

切比雪夫距离

闵可夫斯基距离

K值的选择

  • K值过小
    • 容易受到异常点的影响
    • 容易过拟合
  • k值过大:
    • 受到样本均衡的问题
    • 容易欠拟合

 KD树

 scikit-learn数据集API介绍

案例一

from sklearn.datasets import load_iris
# 获取鸢尾花数据集
iris = load_iris()
print("鸢尾花数据集的返回值:\n", iris)
# 返回值是一个继承自字典的Bench
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
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 获取鸢尾花数据集
iris = load_iris()
# 把数据转换成dataframe的格式
iris_d = pd.DataFrame(iris['data'], columns = ['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])
iris_d['Species'] = iris.target

def plot_iris(iris, col1, col2):
    sns.lmplot(x = col1, y = col2, data = iris, hue = "Species", fit_reg = False)
    plt.xlabel(col1)
    plt.ylabel(col2)
    plt.title('鸢尾花种类分布图')
    plt.show()
plot_iris(iris_d, 'Petal_Width', 'Sepal_Length')

数据集划分api 

 

  • sklearn.model_selection.train_test_split(arrays, *options)
    • 参数:
      • x 数据集的特征值
      • y 数据集的标签值
      • test_size 测试集的大小,一般为float
      • random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
    • return
      • x_train, x_test, y_train, y_test
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 1、获取鸢尾花数据集
iris = load_iris()
# 对鸢尾花数据集进行分割
# 训练集的特征值x_train 测试集的特征值x_test 训练集的目标值y_train 测试集的目标值y_test
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
print("x_train:\n", x_train.shape)
print("y_train:\n", y_train.shape)
print("x_test:\n", x_test.shape)
print("y_test:\n", y_test.shape)
# 随机数种子
x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)
x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)
print("如果随机数种子不一致:\n", x_train == x_train1)
print("如果随机数种子一致:\n", x_train1 == x_train2)

 特征预处理

归一化:通过对原始数据进行变换把数据映射到(默认为[0,1])之间

 

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

data = pd.read_csv("./data/dating.txt")
print(data)
# 1、实例化一个转换器类
transfer = MinMaxScaler(feature_range=(2, 3))
# 2、调用fit_transform
data1 = transfer.fit_transform(data[['milage','Liters','Consumtime']])
data2= transfer.fit_transform(data[:])
print("最小值最大值归一化处理的结果:\n", data1)
print(data1.shape)
print("最小值最大值归一化处理的结果:\n", data2)
print(data2.shape)

 标准化

import pandas as pd
from sklearn.preprocessing import StandardScaler

"""
标准化演示
"""
data = pd.read_csv("./data/dating.txt")
print(data)
# 1、实例化一个转换器类
transfer = StandardScaler()
# 2、调用fit_transform
data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
print("标准化的结果:\n", data)
print("每一列特征的平均值:\n", transfer.mean_)
print("每一列特征的方差:\n", transfer.var_)

标签:KNN,iris,近邻,test,算法,train,print,import,data
来源: https://blog.csdn.net/qq_41579723/article/details/120355517

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有