机器学习篇-KNN算法实现鸢尾花分类

1.概述

  1. KNN 也叫K-近邻算法。大白话其实就是根据你的 " 邻居 " 来推断你的类别。
  2. KNN算法解决问题:分类、回归。
  3. 算法思想:若一个样本在特征空间中的k个最相似的样本大多数都属于某一个类别,则该样本也属于这个类别。
    • 分类流程:
      1. 计算未知样本到每一个训练样本的距离
      2. 将训练样本根据距离大小升序排序
      3. 取出距离最近的K个训练样本
      4. 进行多数表决,统计K个样本中哪个类别的样本个数组多
      5. 将未知的样本归属到出现次数最多的类别
    • 回归流程:
      1. 计算未知样本到每一个训练样本的距离
      2. 将训练样本根据距离大小升序排列
      3. 取出距离最近的K个训练样本
      4. 把这个K个样本的目标值计算其平均值作为将未知的样本预测的值
  4. k值的选择:
    • k值过小:过拟合
    • k值过大:欠拟合

2.KNN算法实现鸢尾花分类

from sklearn.datasets import load_iris
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
import joblib
from sklearn.metrics import accuracy_score

# 加载数据
data = load_iris()
print(data.feature_names)
# 数据处理
data_df = pd.DataFrame(data.data, columns=data.feature_names)
data_df['target'] = data.target
print(data_df)

# 特征工程
# 数据预处理
# 数据集划分
x_train,x_test,y_train,y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=22)
# 数据标准化
transform = StandardScaler()
x_train = transform.fit_transform(x_train)
x_test = transform.transform(x_test)

# 超参数选择(交叉验证及网格搜索)
estimator = KNeighborsClassifier(n_neighbors=1)
param_grid = {'n_neighbors':[2,4,5,7,8]}
estimator = GridSearchCV(estimator=estimator, param_grid=param_grid, cv=4)
estimator.fit(x_train,y_train)
print(estimator.best_params_) # {'n_neighbors': 7}
# 模型训练
estimator = KNeighborsClassifier(n_neighbors=7)
estimator.fit(x_train,y_train)

# 模型保存
joblib.dump(estimator,'iris.pth')
# 模型评估(预测)
# 第一种评估方式
estimator = joblib.load('iris.pth')
print(estimator.score(x_test, y_test))
#第二种评估方式
y_pred = estimator.predict(x_test)
print(accuracy_score(y_test, y_pred))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值