Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >关于《Python数据挖掘入门与实战》读书笔记三(估计器和近邻算法)

关于《Python数据挖掘入门与实战》读书笔记三(估计器和近邻算法)

作者头像
python与大数据分析
发布于 2022-03-11 05:10:01
发布于 2022-03-11 05:10:01
50300
代码可运行
举报
运行总次数:0
代码可运行

Scikit-learn库,实现了一系列数据挖掘算法,提供通用编程接口、标准化的测试和调参工具,便于用户尝试不同算法对其进行充分测试和查找优参数值。

一、Scikit-learn库概念

估计器(Estimator):用于分类、聚类和回归分析。 

转换器(Transformer):用于数据预处理数据转换。 

流水线(Pipeline):组合数据挖掘流程,便于再次使用。

二、scikit-learn估计器

为帮助用户实现大量分类算法,scikit-learn把相关功能封装成所谓的估计器。估计器用于分类任务,它主要包括以下两个函数。

fit():训练算法,设置内部参数。该函数接收训练集及其类别两个参数。 

predict():参数为测试集。预测测试集类别,并返回一个包含测试集各条数据类别的数组

三、近邻算法

近邻算法是标准数据挖掘算法中为直观的一种。为了对新个体进行分类,它查找训练集,找到与新个体相似的那些个体,看看这些个体大多属于哪个类别,就把新个体分到哪个类别。

四、距离度量方法

距离是数据挖掘的核心概念之一。主要包括欧氏距离、曼哈顿距离、余弦距离,其中最常用的是欧氏距离。

欧氏距离,即两个点之间的距离(两个特征向量长度平方和的平方根),得到的结果就是欧氏距离。欧氏距离很直观,但如果异常值偏差比较大或很多特征值为0,精确度就会比较差。

曼哈顿距离为两个特征在标准坐标系中绝对轴距之和。虽然异常值也会影响分类结果,但是其所受的影响要比欧氏距离小得多。

余弦距离更适合解决异常值和数据稀疏问题。直观上讲,余弦距离指的是特征向量夹角的余弦值。

五、数据集理解

即将用到的数据集叫作电离层(Ionosphere),这些数据是由高频天线收集的。

这些天线的目的是侦测在电离层和高层大气中存不存在由自由电子组成的特殊结构。

如果一条数据能给出特殊结构存在的证据,这条数据就属于好的那一类(在数据集中用“g”表示),否则就是坏的(用“b”表示)。

ionosphere.data从http://archive.ics.uci.edu/ml/datasets/Ionosphere,Data Folder下,下载ionosphere.data和ionosphere.names

该数据集每行有35个值,前34个为17座天线采集的数据(每座天线采集两个数据)。

后一个值不是“g”就是“b”,表示数据的好坏,即是否提供了有价值的信息。

六、数据挖掘步骤

一般说来包括理解数据集,数据清洗,创建训练集集和测试集,评估器实例化,训练样本,预测测试结果,优化参数,找到最佳参数。

七、代码

代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
 
import csv
 
import os
 
from sklearn.cross_validation import train_test_split
 
from sklearn.neighbors import KNeighborsClassifier
 
from matplotlib import pyplot as plt
 
from sklearn.cross_validation import cross_val_score
 
# 即将用到的数据集叫作电离层(Ionosphere),这些数据是由高频天线收集的。
 
# 这些天线的目 的是侦测在电离层和高层大气中存不存在由自由电子组成的特殊结构。
 
# 如果一条数据能给出特殊 结构存在的证据,这条数据就属于好的那一类(在数据集中用“g”表示),否则就是坏的(用“b” 表示)。
 
# ionosphere.data从http://archive.ics.uci.edu/ml/datasets/Ionosphere,Data Folder下,下载ionosphere.data和ionosphere.names
 
# 该数据集每行有35个值,前34个为17座天线采集的数据(每座天线采集两个数据)。
 
# 后一 个值不是“g”就是“b”,表示数据的好坏,即是否提供了有价值的信息。
 
data_filename=os.path.join('','','ionosphere.data')
 
# 创建Numpy数组X和y存放数据集。数据集大小已知,共有35134列。
 
X=np.zeros((351,34),dtype='float') #float类型的零np数组,默认都是0
 
y=np.zeros((351,),dtype='bool') #bool类型的np数组,默认都是false
 
# 用csv模块来导入数据集文件,并创建csv阅读器对象
 
with open(data_filename,'r') as input_file:
 
    reader=csv.reader(input_file)
 
 # 遍历文件中的每一行数据。每行数据代表一组测量结果,我们可以将其称作数据集中 的一个个体。
 
 # 用枚举函数来获得每行的索引号,在下面更新数据集X中的某一个体时会用到行号
 
 for i,row in enumerate(reader):
 
 # 获取每一个个体的前34个值,将其强制转化为浮点型,保存到X中。
 
        data=[float(datum) for datum in row[:-1]]
 
        X[i]=data
 
 # 获取每个个体后一个表示类别的值,把字母转化为数字,如果类别为“g”,值为1, 否则值为0。
 
        y[i]=row[-1]=='g'
 
# 导入并运行train_test_split函数,创建训练集和测试集,默认为75%的训练集。
 
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=14)
 
# 导入K近邻分类器这个类,并为其初始化一个实例。
 
# 现阶段,参数用默认的即可,后面再讲参数调优。该算法默认选择5个近邻作为分类依据。
 
estimator = KNeighborsClassifier()
 
# 用训练数据进行训练。
 
# K近邻估计器分析训练集中的数据,比较待分类的新数据点和训练集中的数据,找到新数据点的近邻。
 
estimator.fit(X_train, y_train)
 
# 用测试集测试算法,评估它在测试集上的表
 
y_predicted = estimator.predict(X_test)
 
# 正常情况下,mean是取平均值,此处是返回条件成立的占比
 
accuracy = np.mean(y_test == y_predicted) * 100
 
print("The accuracy is {0:.1f}%".format(accuracy))
 
# -------------版本2,打印测试集、实际结果、预测结果-------------
 
# 将一维数组a转化为二维数组
 
#a = np.array([1,2,3]);
 
#b = np.array([[1],[2],[3]]);
 
#a = a[:,np.newaxis];
 
#c = np.concatenate((b,a),axis=1)
 
# 此处主要是为了将预测值和实际值打印出来,有个直观的对比
 
print(np.concatenate((X_test,y_test[:,np.newaxis],y_predicted[:,np.newaxis]),axis=1))
 
# ---------------------------------------------------------------
 
# -------------版本3,交叉验证解决一次性测试问题-----------------
 
#交叉检验能解决一次性测试所带来的问题
 
#cross_val_score默认使用Stratified K Fold方法切分数据集,它大体上保 证切分后得到的子数据集中类别分布相同,以避免某些子数据集出现类别分布失 衡的情况。
 
scores = cross_val_score(estimator, X, y, scoring='accuracy')
 
#score为得到几次验证的正确率
 
print(scores)
 
average_accuracy = np.mean(scores) * 100
 
print("The average accuracy is {0:.1f}%".format(average_accuracy))
 
# ---------------------------------------------------------------
 
# -------------版本4,调整近邻值以观察不同结果-------------------
 
avg_scores = []
 
max_scores = []
 
min_scores = []
 
all_scores = []
 
parameter_values = list(range(1, 21))
 
# 列n_neighbors的值,比如从120,可以重复进行多次实验
 
for n_neighbors in parameter_values:
 
    estimator = KNeighborsClassifier(n_neighbors=n_neighbors)
 
    scores = cross_val_score(estimator, X, y, scoring='accuracy')
 
 # 把不同n_neighbors值的得分和平均分保存起来,留作分析用。
 
    avg_scores.append(np.mean(scores))
 
    max_scores.append(np.max(scores))
 
    min_scores.append(np.min(scores))
 
    all_scores.append(scores)
 
# matplotlib打印趋势情况
 
# 整体趋势是随着近邻数的增加,正确率不断下降
 
plt.plot(parameter_values, avg_scores, '-o')
 
plt.plot(parameter_values, max_scores, '-+')
 
plt.plot(parameter_values, min_scores, '--')
 
plt.show()
 
# ---------------------------------------------------------------

运行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
关于《Python数据挖掘入门与实战》读书笔记四(转换器和流水线)
为使每条数据各特征值的和为1,使用sklearn.preprocessing.Normalizer。
python与大数据分析
2022/03/11
3220
机器学习 | KNN, K近邻算法
k近邻法 (k-nearest neighbor, k-NN) 是一种基本分类与回归方法。是数据挖掘技术中原理最简单的算法之一,核心功能是解决有监督的分类问题。KNN能够快速高效地解决建立在特殊数据集上的预测分类问题,但其不产生模型,因此算法准确 性并不具备强可推广性。
数据STUDIO
2021/06/24
9610
knn K近邻算法python实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/78177510
bear_fish
2018/09/14
2.1K0
knn K近邻算法python实现
机器学习之鸢尾花-K近邻算法
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。
python与大数据分析
2022/03/11
5290
机器学习之鸢尾花-K近邻算法
机器学习常用算法-k近邻算法
概述 今天介绍一下机器学习常用算法,以及常用的数据处理技巧等。我们都知道机器学习针对特定任务从经验中学习,并且使得我们的任务效果越来越好。我们看一机器学习的workflow,如下所示: 数据采集和标记->数据清洗->特征选择->模型选择->模型训练和测试->模型性能评估和优化->模型使用即上线。 我们一般通过Python来实现机器学习常用算法的程序,所以基于Python语言常用的机器学习类库及其第三方扩展库有:IPython,Jupyter,numpy,matplotlib,scipy,scikit-lea
吕海峰
2018/07/03
8800
A.机器学习入门算法(三):K近邻(k-nearest neighbors),鸢尾花KNN分类,马绞痛数据--kNN数据预处理+kNN分类pipeline
kNN(k-nearest neighbors),中文翻译K近邻。我们常常听到一个故事:如果要了解一个人的经济水平,只需要知道他最好的5个朋友的经济能力, 对他的这五个人的经济水平求平均就是这个人的经济水平。这句话里面就包含着kNN的算法思想。
汀丶人工智能
2023/03/22
1.8K0
A.机器学习入门算法(三):K近邻(k-nearest neighbors),鸢尾花KNN分类,马绞痛数据--kNN数据预处理+kNN分类pipeline
【机器学习基础】k近邻算法
  本文就将介绍一个最基本的分类和回归算法:k近邻(k-nearest neighbor, KNN)算法。KNN是最简单也是最重要的机器学习算法之一,它的思想可以用一句话来概括:“相似的数据往往拥有相同的类别”,这也对应于中国的一句谚语:“物以类聚,人以群分”。具体来说,我们在生活中常常可以观察到,同一种类的数据之间特征更为相似,而不同种类的数据之间特征差别更大。例如,在常见的花中,十字花科的植物大多数有4片花瓣,而夹竹桃科的植物花瓣大多数是5的倍数。虽然存在例外,但如果我们按花瓣数量对植物做分类,那么花瓣数量相同或成倍数关系的植物,相对更可能属于同一种类。
Francek Chen
2025/01/22
1010
【机器学习基础】k近邻算法
机器学习模型从理论到实战|【004-K最邻近算法(KNN)】基于距离的分类和回归
文章链接:https://cloud.tencent.com/developer/article/2472164
远方2.0
2024/11/30
1320
机器学习模型从理论到实战|【004-K最邻近算法(KNN)】基于距离的分类和回归
关于《Python数据挖掘入门与实战》读书笔记五(决策树和随机森林)
本笔记介绍两种分类算法——决策树和随机森林决策树,用它预测NBA篮球赛的获胜球队。比起其他算法,决策树有很多优点,其中最主要的一个优点是决策过程是机器和人都能看懂的,我们使用机器学习到的模型就能完成预测任务。
python与大数据分析
2022/03/11
3640
机器学习第14天:KNN近邻算法
我们设置模型选择周围的三个点,可以看到最近的三个都是蓝色点,那么模型就会将新的数据判别为蓝色点
Nowl
2024/01/18
1260
机器学习第14天:KNN近邻算法
数据分析与数据挖掘 - 09邻近算法
邻近算法又叫做K临近算法或者KNN(K-NearestNeighbor),是机器学习中非常重要的一个算法,but它简单得一塌糊涂,其核心思想就是样本的类别由距离其最近的K个邻居投票来决定。现在假设我们已经有一个已经标记好的数据集,也就是说我们已经知道了数据集中每个样本所属于的类别。这个时候我们拥有一个未标记的数据样本,我们的任务是预测出来这个数据样本所属于的类别。显然邻近算法是属于监督学习(Supervised Learning)的一种,它的原理是计算这个待标记的数据样本和数据集中每个样本的距离,取其距离最近的k个样本,那么待标记的数据样本所属于的类别,就由这距离最近的k个样本投票产生。在这个过程中,有一个动作是标记数据集,这一点在企业中一般是有专门人来负责标记数据的。
马一特
2020/10/09
9150
数据分析与数据挖掘 - 09邻近算法
KNN算法与案例:K-近邻的应用与优化
K-近邻算法(K-Nearest Neighbors, KNN)是一种简单而强大的监督学习算法,广泛应用于分类和回归任务。它的核心思想是通过计算样本之间的距离,将一个数据点的类别或数值预测为其最邻近的K个点的类别或数值。KNN算法具有直观的实现和较强的实际应用能力,尤其在数据较小、类别之间具有明显区分时,表现非常出色。
LucianaiB
2025/01/19
1700
K 近邻算法
鸢尾花Iris Dataset数据集是机器学习领域经典数据集,鸢尾花数据集包含了150条鸢尾花信息,每50条取自三个鸢尾花中之一:Versicolour、Setosa和Virginica。
@小森
2024/03/15
1310
K 近邻算法
python 超全sklearn教程,数据挖掘从入门到入坑
参考链接: 使用Scikit-Learn在Python中进行embedding/投票分类
用户7886150
2021/01/17
1.7K0
从零开始学Python【33】--KNN分类回归模型(实战部分)
在《》期中我们介绍了有关KNN算法的思想和理论知识,但理论终究需要实战进行检验。本节我们就从实战的角度,继续介绍KNN算法的应用。
1480
2019/08/06
1.7K0
数据挖掘算法-KNN算法
邻近算法,又叫K近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。个人感觉KNN算法(K-NearestNeighbor)一种极其简单粗暴的分类方法,举一个例子,比如说你想知道一个人是不是喜欢打游戏,就可以观察他最亲密的几个朋友是不是都喜欢打游戏,如果大多数都喜欢打游戏,可以推测这个人也喜欢打游戏。KNN就是基于这种有点“物以类聚,人以群分”的简单粗暴的想法来进行分类的。
用户9925864
2022/07/27
5770
数据挖掘算法-KNN算法
Python高级算法——K近邻算法(K-Nearest Neighbors,KNN)
K近邻算法(K-Nearest Neighbors,KNN)是一种简单而有效的监督学习算法,广泛应用于分类和回归问题。本文将深入讲解Python中的K近邻算法,包括算法原理、距离度量、K值选择、优缺点,以及使用代码示例演示KNN在实际问题中的应用。
Echo_Wish
2023/12/18
9870
K近邻算法:以"同类相吸"解决分类问题!
KNN(k-nearest neighbors)又叫做K近邻,是机器学习中相对简单好理解的算法,并且它是个几乎不需要训练就可以得到预测结果的模型。
Datawhale
2020/09/04
1.6K0
K近邻算法:以"同类相吸"解决分类问题!
深入浅出学习决策树(二)
其中n是叶子中的样本数,Yi是目标变量的值。简单地说,通过最小化均值周围的方差,我们寻找以这样的方式划分训练集的特征,即每个叶子中的目标特征的值大致相等。
银河1号
2019/04/12
8070
深入浅出学习决策树(二)
【python】在【机器学习】与【数据挖掘】中的应用:从基础到【AI大模型】
在大数据时代,数据挖掘与机器学习成为了各行各业的核心技术。Python作为一种高效、简洁且功能强大的编程语言,得到了广泛的应用。
小李很执着
2024/06/15
1630
推荐阅读
相关推荐
关于《Python数据挖掘入门与实战》读书笔记四(转换器和流水线)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验