K近邻算法(KNN)
2021/9/17 22:05:18
本文主要是介绍K近邻算法(KNN),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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_)
这篇关于K近邻算法(KNN)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南