机器学习测试笔记(10)——K邻近算法(下)

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 机器学习测试笔记(10)——K邻近算法(下)

案例1:红酒分类

上面我们采用make_blobs模拟数据来介绍K邻近算法,下面我们通过sklearn数据集来看一下K邻近算法的表现。

# 红酒案例
# 导入sklearn数据集
from sklearn import datasets
def Sklean_wine():
    #导入红酒数据集
    wine_dataset = datasets.load_wine()
    print('红酒数据集中的键:{}'.format(wine_dataset.keys()))


输出:


红酒数据集中的键:dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names'])
  • 数据:data
  • 目标分类:target
  • 设计:frame
  • 目标分类名称:target_names
  • 数据描述:DESCR
  • 特征变量名称:feature_names


print('红酒数据概况:{}'.format(wine_dataset['data'].shape))

输出:


红酒数据概况:(178, 13)


说明红酒数据中有178个样本,13个特征变量。下面代码可以显示更详细的数据信息。


print('红酒数据:{}:\n'.format(wine_dataset['data']))


输出:

红酒数据:
[[1.423e+01 1.710e+00 2.430e+00 ... 1.040e+00 3.920e+00 1.065e+03]
 [1.320e+01 1.780e+00 2.140e+00 ... 1.050e+00 3.400e+00 1.050e+03]
 [1.316e+01 2.360e+00 2.670e+00 ... 1.030e+00 3.170e+00 1.185e+03]
 ...
 [1.327e+01 4.280e+00 2.260e+00 ... 5.900e-01 1.560e+00 8.350e+02]
 [1.317e+01 2.590e+00 2.370e+00 ... 6.000e-01 1.620e+00 8.400e+02]
 [1.413e+01 4.100e+00 2.740e+00 ... 6.100e-01 1.600e+00 5.600e+02]]


print('红酒数据描述:{}'.format(wine_dataset['DESCR']))


输出:

红酒数据描述:.. _wine_dataset:
Wine recognition dataset
------------------------
**Data Set Characteristics:**
    :Number of Instances: 178 (50 in each of three classes)
    :Number of Attributes: 13 numeric, predictive attributes and the class
    :Attribute Information(属性信息):
     - Alcohol
     - Malic acid
     - Ash
    - Alcalinity of ash  
     - Magnesium
    - Total phenols
   - Flavanoids
 - Nonflavanoid phenols
     - Proanthocyanins
    - Color intensity
     - Hue
     - OD280/OD315 of diluted wines
     - Proline
- class:
            - class_0
            - class_1
            - class_2


#将数据分为训练集和测试集
    X = wine_dataset['data']
    y = wine_dataset['target']
    #测试集占30%
    X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=0,test_size=0.3)
    # 打印X_train,X_test,y_train,y_test的形态
    print("X_train,的形态:{}".format(X_train.shape))
    print("X_test的形态:{}".format(X_test.shape))
    print("y_train的形态:{}".format(y_train.shape))
    print("y_test的形态:{}".format(y_test.shape))


输出:

X_train,的形态:(124, 13)
X_test的形态:(54, 13)
y_train的形态:(124,)
y_test的形态:(54,)


从输出可以看出,训练集的数量124(124/178=70%),测试集的数量54 (54/178=30%)。

 #导入KNN算法
    knn = KNeighborsClassifier(n_neighbors=1)
    knn.fit(X_train,y_train)
    print('测试数据的得分:{}:\n'.format(knn.score(X_test,y_test)))


输出


测试数据的得分:0.7592592592592593:


#输出计算值
print(knn.predict(X_test))
#输出实际标签
print(y_test)


输出

[0 1 1 0 1 1 0 2 1 1 0 1 0 2 1 1 0 0 1 0 1 0 1 1 0 1 1 1 2 2 0 0 1 0 0 0 2 1 1 1 2 0 1 1 1 2 2 2 2 0 2 1 0 2]
[0 2 1 0 1 1 0 2 1 1 2 2 0 1 2 1 0 0 1 0 1 0 0 1 1 1 1 1 1 2 0 0 1 0 0 0 2 1 1 2 0 0 1 1 1 0 2 1 2 0 2 2 0 2] 


  • 数据得分为0.76,从输出结果也可以看出,有13个数据错误(54-13)/54=0.76。准确率才0.76,K邻近算法拟合度在红酒分类中表现不是太好。


不管如何,假设我们现在有一瓶酒,它的参数如下:

  • Alcohol(酒精): 25.5
  • Malic acid(苹果酸):3.14
  • Ash(灰) : 3.22
  • Alcalinity of ash(灰分的碱性) : 18.5  
  • Magnesium(镁) : 95.8
  • Total phenols(总酚): 0.97
  • Flavanoids(黄酮类化合物) :2.52
  • Nonflavanoid phenols(非薰衣草酚类) :0.67
  • Proanthocyanins(原花青素) :1.52
  • Color intensity (彩色亮度): 7.3
  • Hue(色彩) : 0.98
  • OD280/OD315 of diluted wines(稀释葡萄酒的OD280/OD315) : 2.96
  • Proline(脯氨酸) : 990


我们通过下面的程序进行判断。

 X_new =  np.array([[25.5,3.14,3.22,18.5,95.8, 0.97, 2.52, 0.67, 1.52, 7.3, 0.98, 2.96, 990]])
    prediction = knn.predict(X_new)
    print('预测的红酒为:{}:\n'.format(wine_dataset['target_names'][prediction]))


输出


预测的红酒为:['class_0']:


案例2:鸢尾花分类

由于代码与红酒相似,我们直接上代码。

def Sklean_iris():
    # 加载数据其中的鸢尾花数据
    iris_dataset = datasets.load_iris()
    print('鸢尾花数据集中的键:{}'.format(iris_dataset.keys()))
    print('鸢尾花数据概况:{}'.format(iris_dataset['data'].shape))
    print('鸢尾花数据:{}:\n'.format(iris_dataset['data']))
    print('鸢尾花数据描述:{}'.format(iris_dataset['DESCR']))
    #将数据分为训练集和测试集
    X = iris_dataset['data']
    y = iris_dataset['target']
    #测试集占30%
    X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=0,test_size=0.3)
    # 打印X_train,X_test,y_train,y_test的形态
    print("X_train,的形态:{}".format(X_train.shape))
    print("X_test的形态:{}".format(X_test.shape))
    print("y_train的形态:{}".format(y_train.shape))
    print("y_test的形态:{}".format(y_test.shape))
    # 定义模型算法为K近邻分类器
    knn = KNeighborsClassifier()
    # 用fit完成训练
    knn.fit(X_train,y_train)
    print('测试数据的得分:{}:\n'.format(knn.score(X_test,y_test)))
    # 将测试数据集x_test运用到训练完成后的knn模型中去
     print(knn.predict(X_test))
    # 输出测试集中的真实结果
    print(y_test)


输出:

鸢尾花数据集中的键:dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename'])
鸢尾花数据概况:(150, 4)
鸢尾花数据:
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
鸢尾花数据集中的键:dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename'])
鸢尾花数据概况:(150, 4)
鸢尾花数据:
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
鸢尾花数据描述:.. _iris_dataset:
Iris plants dataset
--------------------
**Data Set Characteristics:**
    :Number of Instances: 150 (50 in each of three classes)
    :Number of Attributes: 4 numeric, predictive attributes and the class
:Attribute Information:
        - sepal length in cm
        - sepal width in cm
        - petal length in cm
        - petal width in cm
        - class:
                - Iris-Setosa
                - Iris-Versicolour
                - Iris-Virginica
X_train,的形态:(105, 4)
X_test的形态:(45, 4)
y_train的形态:(105,)
y_test的形态:(45,)
测试数据的得分:0.9777777777777777:
[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0 2 1 1 2 0 2 0 0]
[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0 1 1 1 2 0 2 0 0]


运用K邻近算法对鸢尾花分类的准确度为0.98,非常好。

同样我们假设现在有一颗鸢尾花,它的数据为:

  • sepal length in cm:4.5
  • sepal width in cm :3.6
  • petal length in cm :1.3
  • petal width in cm :0.3


通过代码

X_new =  np.array([[4.5,3.6,1.3,0.3]])
    prediction = knn.predict(X_new)
    print('预测的鸢尾花为:{}:\n'.format(iris_dataset['target_names'][prediction]))


输出


预测的鸢尾花为:['setosa']:


Sklean数据

上面介绍了Sklean的鸢尾花和红酒数据,Sklean.datasets还提供了其他静态数据和动态数据。


静态数据

数据集

函数

介绍

鸢尾花数据集

load_iris()

用于分类任务的数据集

手写数字数据集

load_digits()

用于分类任务或者降维任务的数据集

乳腺癌数据集

load_barest_cancer()

简单经典的用于二分类任务的数据集

糖尿病数据集

load_diabetes()

经典的用于回归认为的数据集

波士顿房价数据集

load_boston()

经典的用于回归任务的数据集

体能训练数据集

load_linnerud()

经典的用于多变量回归任务的数据集

红酒数据集

load_wine()

经典的用于多变量回归任务的数据集

两个月亮集

make_moons()

二分类数据集,像两个月亮一样(太极)


动态数据


函数

介绍

fetch_olivetti_faces()

脸部图片数据集

fetch_20newsgroups()

用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。数据集收集了大约20,000左右的新闻组文档,均匀分为20个不同主题的新闻组集合。返回一个可以被文本特征提取器。向量化后的数据fetch_20newsgroups_vectorized(),返回一个已提取特征的文本序列,即不需要使用特征提取器

fetch_lfw_people()

打好标签的人脸数据集

fetch_lfw_pairs()

该任务称为人脸验证:给定一对两张图片,二分类器必须预测这两个图片是否来自同一个人

fetch_covtype()

森林植被类型,总计581012个样本,每个样本由54个维度表示(12个属性,其中2个分别是onehot4维和onehot40维),以及target表示植被类型1-7,所有属性值均为number,详情可调用fetch_covtype()['DESCR']了解每个属性的具体含义

fetch_rcv1()

路透社新闻语料数据集

fetch_kddcup99()

KDD竞赛在1999年举行时采用的数据集,KDD99数据集仍然是网络入侵检测领域的事实Benckmark,为基于计算智能的网络入侵检测研究奠定基础,包含41项特征

fetch_california_housing()

加利福尼亚的房价数据,总计20640个样本,每个样本8个属性表示,以及房价作为target,所有属性值均为number,详情可调用fetch_california_housing()['DESCR']了解每个属性的具体含义

fetch_species_distributions()

物种分布数据集


Sklearn 交叉验证

人工智能分为训练集和测试集,训练集和测试集选择不当往往会造成过拟合或者欠拟合。我们可以通过交叉验证来解决这个问题。

 

我们把所有的样本数据分为n等份,第1次用第1个作为测试样本数据,第2…n个作为训练样本数据;第2次用第2个作为测试样本数据,第1、3…n个作为训练样本数据;….; 第n次用第n个作为测试样本数据,第1…n-1个作为训练样本数据。

#交叉验证法
from sklearn import svm
from sklearn.model_selection import cross_val_score
def Sklean_iris_cross_validation():
    iris_dataset = datasets.load_iris()
    X,y = datasets.load_iris(return_X_y=True)
    print(X.shape,X.shape)
    X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.4, random_state=0)
    print("X_train,的形态:{}".format(X_train.shape))
    print("X_test的形态:{}".format(X_test.shape))
    print("y_train的形态:{}".format(y_train.shape))
    print("y_test的形态:{}".format(y_test.shape))
    clf = svm.SVC(kernel='linear',C=1).fit(X_train,y_train)
    print('交叉验证法前测试数据的得分:{}:\n'.format(clf.score(X_test,y_test)))
    clf = svm.SVC(kernel='linear',C=1)
    scores = cross_val_score(clf,X,y,cv=5)#实现交叉验证,cv=5:分5组
    print('交叉验证法后测试数据的得分:{}:\n'.format(scores))


输出

(150, 4) (150, 4)
X_train,的形态:(90, 4)
X_test的形态:(60, 4)
y_train的形态:(90,)
y_test的形态:(60,)
交叉验证法前测试数据的得分:0.9666666666666667:
交叉验证法后测试数据的得分:[0.96666667 1.      0.96666667 0.96666667 1.        ]:


  • 可以看出使用交叉验证法后,有些情形下的得分竟然高达1.即100%正确,我们用交叉后的对上面鸢尾花的数据进行再次鉴别。特征数据为[4.5,3.6,1.3,0.3]


 X_new =  np.array([[4.5,3.6,1.3,0.3]])


 clf.fit(X_train,y_train)
    prediction = clf.predict(X_new)
    print('预测的鸢尾花为:{}:\n'.format(iris_dataset['target_names'][prediction]))


输出


预测的鸢尾花为:['setosa']:


与上面一样,输出结果仍旧为setosa


过拟合和欠拟合

这里介绍一下过拟合和欠拟合。所谓欠拟合即不管在训练集还是在测试集上表现都不佳,欠拟合是由于训练不够造成的;所谓过拟合即不管在训练集还是在测试集上表现很高,但是在测试集上表现不佳,过拟合是由于训练过度造成的。

—————————————————————————————————


软件安全测试

https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486

接口自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486

DevOps 和Jenkins之DevOps

https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486

DevOps与Jenkins 2.0之Jenkins

https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486

Selenium自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486

性能测试第1季:性能测试基础知识

https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486

性能测试第2季:LoadRunner12使用

https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486

性能测试第3季:JMeter工具使用

https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486

性能测试第4季:监控与调优

https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486

Django入门

https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486

啄木鸟顾老师漫谈软件测试

https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
2天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
11 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
23天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
28天前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
52 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
12天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
56 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
1月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
79 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
22天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
7天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
8天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。

热门文章

最新文章