K近邻算预测数据准确率

导入Iris数据集

我们用sklearn库里自带的iris数据进行数据分析。

from sklearn.datasets import load_iris

获取iris的特征值和目标值

iris的特征值的特征数据有四个

data = load_iris()
# 获取特征名字
print(data.feature_names)
# ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

获取特征值

# 获取特征值
x = data.data
"""
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
...
...
...
 [6.3 2.5 5.  1.9]
 [6.5 3.  5.2 2. ]
 [6.2 3.4 5.4 2.3]
 [5.9 3.  5.1 1.8]]
"""

获取目标值


# 获取目标值
y = data.target
"""
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

"""

用train_test_split将数据分为训练集和测试集

简单介绍一下train_test_split

sklearn.model_selection.train_test_split(*arrays, **options)
x  数据集的特征值
y  数据集的标签值
test_size  测试集的大小,一般为float
random_state  随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同
reutrn  训练集特征值,测试集特征值,训练标签,测试标签

注意返回值,
训练集 train: x_train, y_train
测试集 test : x_test, y_test

顺序不能调换

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)

进行主成分分析

简单介绍一下PCA

PCA 是什么
    本质:PCA是一种分析、简化数据集地技术
    目的:是数据位数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
    作用:可以消减回归分析或者聚类分析中特征的数量

# PCA(n_components=0.9) 将数据分解为较低维数空间
# n_components: 小数  0~1  90% ~ 95%
#               整数  减少到的特征数量
# PCA.fit_transform(X)
# X:numpy array格式的数据[n_samples, n_features]
# 返回值:转换后指定维数的array

当特征值特别多时,可以使用PCA来提高准确率

from sklearn.decomposition import PCA
std = StandardScaler()
print("通过标准化预处理后的预测效果")
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)

这里可以不使用

进行标准化预处理

简单介绍一下StandardScaler()

# 标准化特点:通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
# 标准化公式:X' = (x - mean) / Z
# 注释:作用于每一列,mean为平均值,Z为标准差,var为方差,var = [(x1-mean)^2+(x2-mean)^2+...]/n
# n 为每个特征的样本数,Z= var^(1/2), 方差Z 考量数据的稳定性
# 标准化总结:再已有样本足够多的情况下比较稳定,适合现代化嘈杂大数据场景
# StandardScaler(...) 处理之后每列来说所有数据都聚集在均值0附近,标准差为1
# StandardScaler.fit_transform(X) X-->numpy array格式的数据[n_samples, n_features]  返回值--> 转换后的形状相同的array
# StandardScaler.mean_  原始数据中每列特征的平均值
# StandardScaler.std_  原始数据每列特征的方差
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
print("通过标准化预处理后的预测效果")
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)

进行k近邻算法

k近邻算法的简单介绍

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, algorithm = 'auto')
n_neighbors:int, 可选(默认为5), k_neighbors查询默认使用的邻居数
algorithm:{'auto', 'ball_tree', 'kd_tree', 'brute'}, 可选用于计算最近邻居的算法:'ball_tree'
将会使用Ball_tree, 'kd_tree' 将使用KDTree。'auto'将尝试根据传送给fit方法的值决定最适合的算法。
(不同实现方式影响效率)

K-近邻算法(适合于多分类问题)

  • k的选取:先选取一个较小的值,再根据交叉验证法来选取最优K值。参数k的取值一般通常不大于20
  • 距离衡量:欧氏距离 曼哈顿距离等
  • KNN缺陷:样本不平衡问题(怎么解决)
  • 类别的判定:
    • 投票决定:少数服从多数,近邻中哪个类别的点最多就分为该类。
    • 加权投票法:根据距离的远近,对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)
  • 优点:不需要参数估计,不需要事先训练
  • 缺点:kNN不用事先训练,而是在输入待分类样本时才开始运行,这一特点导致kNN计算量特别大,而且训练样本必须存储在本地,内存开销也特别大。
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=4)
knn.fit(x_train, y_train)

得出预测准确率

y_predict = knn.predict(x_test)
print("预测目标工资为:", y_predict)
print("预测的准确率为:", knn.score(x_test, y_test))

在这里插入图片描述

完整代码

from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# data = load_iris()
# print("特征值名字:")
# print(data.feature_names)
# print("获取特征值:")
# print(data.data)
# print("获取目标值:")
# print(data.target)

def knncls():
    data = load_iris()
    # 获取特征值
    x = data.data
    # 获取目标值
    y = data.target
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
    # 进行标准化处理
    std = StandardScaler()
    print("通过标准化预处理后的预测效果")
    x_train = std.fit_transform(x_train)
    x_test = std.transform(x_test)
    # print("通过PCA降维处理后的预测效果")
    # pca = PCA(n_components=0.95)
    # x_train = pca.fit_transform(x_train)
    # x_test = pca.transform(x_test)
    knn = KNeighborsClassifier(n_neighbors=4)
    knn.fit(x_train, y_train)
    y_predict = knn.predict(x_test)
    print("预测目标工资为:", y_predict)
    print("预测的准确率为:", knn.score(x_test, y_test))
    return None
knncls()

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是强筱华哇!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值