K近邻算法用作回归的使用介绍(使用Python代码)

合集下载

kneighborsregressor函数的作用

kneighborsregressor函数的作用

KNeighborsRegressor函数是一个基于最近邻算法的回归模型,在机器学习中被广泛应用。

它的主要作用是根据训练集中的样本数据,对新的输入数据进行回归预测,预测结果是输入数据对应的连续型数值。

KNeighborsRegressor函数是scikit-learn库中的一个重要模型,它基于最近邻算法的思想,通过计算输入数据与训练集中数据点之间的距离,来预测输入数据的输出值。

下面我将详细介绍KNeighborsRegressor函数的作用。

一、KNeighborsRegressor函数的原理KNeighborsRegressor函数的原理是基于最近邻算法,最近邻算法是一种常用的模式识别方法,在回归问题中也有广泛的应用。

该算法的原理是通过计算输入数据点与训练集中数据点之间的距离,然后选择距离最近的k个数据点作为预测的邻居,最终根据这些邻居的数值,来对输入数据的输出值进行预测。

二、KNeighborsRegressor函数的参数KNeighborsRegressor函数的主要参数包括n_neighbors、weights、algorithm等。

其中,n_neighbors表示选取邻居的个数,weights表示对邻居赋予的权重,algorithm表示计算邻居的算法。

这些参数可以根据具体问题的需求进行调整,以获得更好的回归预测效果。

三、KNeighborsRegressor函数的使用方法使用KNeighborsRegressor函数进行回归预测时,首先需要准备训练集数据,并对输入数据进行标准化处理。

通过调用KNeighborsRegressor函数,传入训练集数据,设置相关参数,即可得到回归预测结果。

四、KNeighborsRegressor函数的优缺点KNeighborsRegressor函数的优点在于简单易用,对于小规模的数据集和特征较少的问题具有较好的效果。

但是,由于其需要对每个预测的样本进行计算相似度,对于大规模的数据集会导致计算复杂度高,预测耗时长的缺点。

机器学习经典分类算法——k-近邻算法(附python实现代码及数据集)

机器学习经典分类算法——k-近邻算法(附python实现代码及数据集)

机器学习经典分类算法——k-近邻算法(附python实现代码及数据集)⽬录⼯作原理存在⼀个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每⼀数据与所属分类的对应关系。

输⼊没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进⾏⽐较,然后算法提取样本集中特征最相似数据(最近邻)的分类特征。

⼀般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不⼤于20的整数。

最后选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

举个例⼦,现在我们⽤k-近邻算法来分类⼀部电影,判断它属于爱情⽚还是动作⽚。

现在已知六部电影的打⽃镜头、接吻镜头以及电影评估类型,如下图所⽰。

现在我们有⼀部电影,它有18个打⽃镜头、90个接吻镜头,想知道这部电影属于什么类型。

根据k-近邻算法,我们可以这么算。

⾸先计算未知电影与样本集中其他电影的距离(先不管这个距离如何算,后⾯会提到)。

现在我们得到了样本集中所有电影与未知电影的距离。

按照距离递增排序,可以找到k个距离最近的电影。

现在假定k=3,则三个最靠近的电影依次是He's Not Really into Dudes、Beautiful Woman、California Man。

python实现⾸先编写⼀个⽤于创建数据集和标签的函数,要注意的是该函数在实际⽤途上没有多⼤意义,仅⽤于测试代码。

def createDataSet():group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])labels = ['A','A','B','B']return group, labels然后是函数classify0(),该函数的功能是使⽤k-近邻算法将每组数据划分到某个类中,其伪代码如下:对未知类别属性的数据集中的每个点依次执⾏以下操作:(1)计算已知类别数据集中的点与当前点之间的距离;(2)按照距离递增次序排序;(3)选取与当前点距离最⼩的k个点;(4)确定前k个点所在类别的出现频率;(5)返回前k个点出现频率最⾼的类别作为当前点的预测分类。

python中kneighbrs用法

python中kneighbrs用法

Python中kneighbors用法1. 概述K最近邻(K-nearest neighbors,KNN)是一种简单而实用的分类和回归算法。

它的基本思想是:对于一个给定的样本,找出训练集中与其最近的K个样本,然后根据其标签进行决策。

在Python中,sklearn库提供了KNN算法的实现,其中kneighbors方法用于查找K个最近邻样本。

2. KNeighborsClassifierKNeighborsClassifier是sklearn库中专门用于分类问题的KNN算法实现。

在使用KNeighborsClassifier进行分类任务时,可以通过kneighbors方法找到每个样本的K个最近邻。

下面是KNeighborsClassifier类的一般用法:```pythonfrom sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors=3)knn.fit(X_tr本人n, y_tr本人n)distances, indices = knn.kneighbors(X_test)```其中,n_neighbors参数指定了要查找的最近邻个数,X_tr本人n和X_test分别表示训练集和测试集。

3. kneighbors方法参数解释kneighbors方法有两个主要参数,分别是n_neighbors和return_distance。

其中,n_neighbors指定了要查找的最近邻个数,而return_distance决定是否返回最近邻样本与查询样本的距离。

默认情况下,return_distance为True,即返回最近邻样本与查询样本的距离。

下面是kneighbors方法的基本用法:```pythondistances, indices = knn.kneighbors(X_test, n_neighbors=3, return_distance=True)print(distances)print(indices)```其中,distances是一个数组,存储了每个查询样本与其最近邻样本之间的距离;indices也是一个数组,存储了每个查询样本的K个最近邻在训练集中的索引。

K近邻算法用作回归的使用介绍(使用Python代码)

K近邻算法用作回归的使用介绍(使用Python代码)

介绍在我遇到的所有机器学习算法中,KNN是最容易上手的。

尽管它很简单,但事实上它其实在某些任务中非常有效(正如你将在本文中看到的那样)。

甚至它可以做的更好?它可以用于分类和回归问题!然而,它其实更擅长用于分类问题。

我很少看到KNN在任何回归任务上实现。

我在这里的目的是说明并强调,当目标变量本质上是连续的时,KNN是如何有效的运作的。

在本文中,我们将首先了解KNN算法背后的思维,研究计算点与点之间距离的不同方法,然后最终在Big Mart Sales数据集上用Python实现该算法。

让我们动起来吧1.用简单的例子来理解KNN背后的逻辑让我们从一个简单的例子开始。

请考虑下表 - 它包含10人的身高,年龄和体重(目标)值。

如你所见,缺少ID11的重量值。

我们需要根据他们的身高和年龄来预测这个人的体重。

注意:此表中的数据不代表实际值。

它仅用作一个例子来解释这个概念。

为了更清楚地了解这一点,下面是上表中高度与年龄的关系图:在上图中,y轴表示人的身高(以英尺为单位),x轴表示年龄(以年为单位)。

这些点是根据ID值进行编号。

黄点(ID 11)是我们的测试点。

如果我要求你根据图来确定ID11的重量,你的答案会是什么?你可能会说,因为ID11 更接近第 5点和第1点,所以它必须具有与这些ID类似的重量,可能在72-77千克之间(表中ID1和ID5的权重)。

这实际上是有道理的,但你认为算法会如何预测这些值呢?让我们在下边进行试验讨论。

2. KNN算法是怎样工作的如上所述,KNN可用于分类和回归问题。

该算法使用“ 特征相似性”来预测任何新数据点的值。

这意味着新的点将根据其与训练集中的点的接近程度而进行分配。

从我们的例子中,我们知道ID11的高度和年龄类似于ID1和ID5,因此重量也大致相同。

如果这是一个分类问题,我们会采用该模式作为最终预测。

在这种情况下,我们有两个重量值--72和77.猜猜最终值是如何计算的?是取两个重量的平均值来作为最终的预测值。

经典算法之K近邻(回归部分)

经典算法之K近邻(回归部分)

经典算法之K近邻(回归部分)1.算法原理1.分类和回归 分类模型和回归模型本质⼀样,分类模型是将回归模型的输出离散化。

⼀般来说,回归问题通常是⽤来预测⼀个值,如预测房价、未来的天⽓情况等等,例如⼀个产品的实际价格为500元,通过回归分析预测值为499元,我们认为这是⼀个⽐较好的回归分析。

回归是对真实值的⼀种逼近预测。

分类问题是⽤于将事物打上⼀个标签,通常结果为离散值。

例如判断⼀幅图⽚上的动物是⼀只猫还是⼀只狗。

分类并没有逼近的概念,最终正确结果只有⼀个,错误的就是错误的,不会有相近的概念。

简⾔之: 定量输出称为回归,或者说是连续变量预测,预测明天的⽓温是多少度,这是⼀个回归任务 定性输出称为分类,或者说是离散变量预测,预测明天是阴、晴还是⾬,就是⼀个分类任务2.KNN回归 KNN算法不仅可以⽤于分类,还可以⽤于回归。

通过找出⼀个样本的k个最近邻居,将这些邻居的某个(些)属性的平均值赋给该样本,就可以得到该样本对应属性的值。

3.原理问题引⼊ 我有个3个卧室的房⼦,租多少钱呢? 不知道的话,就去看看别⼈3个卧室的房⼦都租多少钱吧! 其中,K代表我们的候选对象个数,也就是找和我房间数量最相近的K个房⼦的价格,做⼀定的处理后(例如平均),作为我们房⼦的出租价格。

那么,如何衡量和我的房⼦最相近呢?如何评估我们得到的出租价格的好坏呢?K近邻原理假设我们的数据源中只有5条信息,现在我想针对我的房⼦(只有⼀个房间)来定⼀个价格。

在这⾥假设我们选择的K=3,也就是选3个跟我最相近的房源。

再综合考虑这三个只有房⼦的价格,就得到了我的房⼦⼤概能值多钱啦!如何才能知道哪些数据样本跟我最相近呢?欧⽒距离公式:其中p1到p n是⼀条数据的所有特征信息,q1到q n是另⼀条数据的所有特征信息。

4.举例说明假设我们的房⼦有3个房间单变量下的距离定义简化为:读取数据:import pandas as pdfeatures = ['accommodates','bedrooms','bathrooms','beds','price','minimum_nights','maximum_nights','number_of_reviews'] dc_listings = pd.read_csv('listings.csv')dc_listings = dc_listings[features]print(dc_listings.shape)dc_listings.head()仅取以单个指标accommodates的个数来计算每个样本到我们的距离:代码实现如下:import numpy as np# 定义我们的accomodates个数为3our_acc_value = 3# 新增⼀列distance,记录每个样本到3的距离# np.abs函数⽤于计算绝对值# 通过dc_listings.accommodates取出accommodates列的所有数据# 可通过dc_listings.accommodates取值# 也可通过字典的形式取值,dc_listings['accommodates']或dc_listings.get('accommodates')dc_listings['distance'] = np.abs(dc_listings.accommodates - our_acc_value)# 取出结果列distance# value_counts()统计个数# sort_index()按照索引distance排序dc_listings.distance.value_counts().sort_index()输出结果:0 4611 22942 5033 2794 355 736 177 228 79 1210 211 412 613 8Name: distance, dtype: int64 从结果中可以看出,以房间个数来衡量的话,同样有3个房间的样本⼀共461个假设K=5,即取距离我们最近的五个样本的价格取平均值,作为我们的出租价格。

k近邻算法python代码实现,不使用sklearn库 -回复

k近邻算法python代码实现,不使用sklearn库 -回复

k近邻算法python代码实现,不使用sklearn库-回复k近邻算法是一种简单但常用的分类算法,可以用于分类和回归问题。

在这篇文章中,我们将逐步介绍k近邻算法的原理,并编写Python代码实现该算法,而不使用任何第三方库。

第一步:理解k近邻算法的原理k近邻算法是一种基于实例的学习方法,它使用训练集中的数据进行分类。

该算法的基本思想是,如果一个样本的k个最近邻居中大多数属于某个类别,则该样本也属于该类别。

具体而言,k近邻算法包括以下几个步骤:1. 计算测试样本与训练集中每个样本的距离;2. 根据距离的大小,选择与测试样本最近的k个样本;3. 根据k个近邻样本的类别进行投票,选择得票最多的类别作为测试样本的预测类别。

第二步:编写代码实现k近邻算法下面是一个简单的k近邻算法的Python代码实现:pythonimport numpy as npdef euclidean_distance(instance1, instance2):distance = np.sqrt(np.sum((instance1 - instance2) 2))return distancedef get_neighbors(train_data, test_instance, k):distances = []for train_instance in train_data:dist = euclidean_distance(test_instance, train_instance[:-1])distances.append((train_instance, dist))distances.sort(key=lambda x: x[1])neighbors = [distance[0] for distance in distances[:k]]return neighborsdef predict_classification(neighbors):classes = [instance[-1] for instance in neighbors]prediction = max(set(classes), key=classes.count)return predictiondef knn(train_data, test_data, k):predictions = []for test_instance in test_data:neighbors = get_neighbors(train_data, test_instance, k)prediction = predict_classification(neighbors)predictions.append(prediction)return predictions上面的代码中,`train_data`是训练集数据,`test_data`是测试集数据。

python kneighborsregressor参数

python kneighborsregressor参数

python kneighborsregressor参数【原创版】目录1.KNeighborsRegressor 参数介绍2.参数名称与含义3.参数的使用方法4.参数示例5.总结正文一、KNeighborsRegressor 参数介绍KNeighborsRegressor 是 Python 中 scikit-learn 库的一种回归算法,它基于 k-近邻算法实现,可以用于解决分类和回归问题。

在使用KNeighborsRegressor 时,需要对其参数进行设置,以提高模型的性能。

二、参数名称与含义1.n_neighbors:表示 k-近邻算法中的 k 值,即邻居的数量。

这个参数决定了模型如何选择最佳的 k 个邻居来计算目标变量的预测值。

n_neighbors 的取值范围为 1 到 n(样本数量),默认值为 5。

2.weights:表示邻居的权重。

默认情况下,所有邻居的权重相等,即“均匀”("uniform")。

也可以设置为"distance",表示邻居的权重与其到目标点的距离成反比。

还可以设置为自定义函数,如"linear"、"log1p"等。

3.p:表示在"distance"权重策略下,权重与距离的关系。

默认值为 2,表示权重与距离的平方成反比。

4.metric:表示邻居之间距离的计算方法。

默认值为"euclidean",表示使用欧氏距离。

还可以设置为"manhattan"、"minkowski"等。

5.max_iter:表示最大迭代次数。

默认值为 None,表示不设置最大迭代次数,模型会一直迭代直到收敛。

6.tol:表示收敛阈值。

默认值为 1e-4,表示当误差小于该值时,模型停止迭代。

7.random_state:表示随机种子。

用于保证模型的可重复性,特别是在使用"kd_tree"搜索算法时。

python sklearn knn用法

python sklearn knn用法

在 scikit-learn 中,K-近邻(K-Nearest Neighbors,KNN)是一种常用的监督学习算法,用于分类和回归问题。

以下是使用 scikit-learn 中的 KNN 模型的基本用法:
KNN 分类器的使用:
1.导入相关库:
2.准备数据:
假设有一个分类任务,其中X是特征数据,y是对应的标签。

3.创建 KNN 分类器:
4.训练模型:
5.进行预测:
6.评估模型性能:
KNN 回归器的使用:
KNN 也可以用于回归问题。

以下是基本的用法:
1.导入相关库:
2.准备数据:
假设有一个回归任务,其中X是特征数据,y是对应的目标值。

3.创建 KNN 回归器:
4.训练模型:
5.进行预测:
6.评估模型性能:
回归问题通常使用均方误差(Mean Squared Error,MSE)等指标进行评估。

这是一个简单的 KNN 模型在 scikit-learn 中的使用示例。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

介绍在我遇到的所有机器学习算法中,KNN是最容易上手的。

尽管它很简单,但事实上它其实在某些任务中非常有效(正如你将在本文中看到的那样)。

甚至它可以做的更好?它可以用于分类和回归问题!然而,它其实更擅长用于分类问题。

我很少看到KNN在任何回归任务上实现。

我在这里的目的是说明并强调,当目标变量本质上是连续的时,KNN是如何有效的运作的。

在本文中,我们将首先了解KNN算法背后的思维,研究计算点与点之间距离的不同方法,然后最终在Big Mart Sales数据集上用Python实现该算法。

让我们动起来吧1.用简单的例子来理解KNN背后的逻辑让我们从一个简单的例子开始。

请考虑下表 - 它包含10人的身高,年龄和体重(目标)值。

如你所见,缺少ID11的重量值。

我们需要根据他们的身高和年龄来预测这个人的体重。

注意:此表中的数据不代表实际值。

它仅用作一个例子来解释这个概念。

为了更清楚地了解这一点,下面是上表中高度与年龄的关系图:在上图中,y轴表示人的身高(以英尺为单位),x轴表示年龄(以年为单位)。

这些点是根据ID值进行编号。

黄点(ID 11)是我们的测试点。

如果我要求你根据图来确定ID11的重量,你的答案会是什么?你可能会说,因为ID11 更接近第 5点和第1点,所以它必须具有与这些ID类似的重量,可能在72-77千克之间(表中ID1和ID5的权重)。

这实际上是有道理的,但你认为算法会如何预测这些值呢?让我们在下边进行试验讨论。

2. KNN算法是怎样工作的如上所述,KNN可用于分类和回归问题。

该算法使用“ 特征相似性”来预测任何新数据点的值。

这意味着新的点将根据其与训练集中的点的接近程度而进行分配。

从我们的例子中,我们知道ID11的高度和年龄类似于ID1和ID5,因此重量也大致相同。

如果这是一个分类问题,我们会采用该模式作为最终预测。

在这种情况下,我们有两个重量值--72和77.猜猜最终值是如何计算的?是取两个重量的平均值来作为最终的预测值。

以下是该算法的逐步说明:1.首先,计算新的点与每个训练点之间的距离。

1.选择最接近的k个数据点(基于距离)。

在我们演示的例子中,如果k的值为3,则将选择点156。

我们将在本文后面进一步探索选择正确的k值的方法。

1.这些数据点的平均值是新点的最终预测值。

在这里,我们的ID11的重量为 =(77 +72 + 60)/ 3 = 69.66千克。

在接下来的几节中,我们将详细讨论这三个步骤中的每一个。

3.点与点之间距离的计算方法所述第一步骤是计算新点和每个训练点之间的距离。

计算该距离有多种方法,其中最常见的方法是 - 欧几里德,曼哈顿(用于连续)和汉明距离(用于分类)。

1.欧几里德距离:欧几里德距离计算为新点(x)和现有点(y)之间的差的平方和的平方根。

2.曼哈顿距离:这是实际向量之间的距离,使用它们的绝对差值之和表示。

1.汉明距离:用于分类变量。

如果值(x)和值(y)相同,则距离D将等于0。

否则D = 1。

一旦一个新的观测值与我们训练集中的点之间的距离被测量出来,下一步就是要选择最近的点。

要考虑的点的数量由k的值定义。

4.如何选择k因子第二个步骤是选择k值。

这决定了我们在为任何新的观察值赋值时所要考虑到的邻居的数量。

在我们的示例中,k值 = 3,最近的点是ID1,ID5和ID6。

ID11 =(77 + 72 + 60)/ 3ID11 = 69.66千克如果k的值 = 5的话,那么距离最近的点将是ID1,ID4,ID5,ID6,ID10。

ID 11 =(77 + 59 + 72 + 60 + 58)/ 5ID 11 = 65.2千克我们注意到,基于k值,最终结果将趋于变化。

那我们怎样才能找出k的最优值呢?让我们根据我们的训练集和验证集的误差计算来决定它(毕竟,最小化误差是我们的最终目标!)。

请看下面的图表,了解不同k值的训练误差和验证误差。

对于非常低的k值(假设k = 1),模型过度拟合训练数据,这导致验证集上的高错误率。

另一方面,对于k的高值,该模型在训练集和验证集上都表现不佳。

如果仔细观察,验证误差曲线在k = 9的值处达到最小值。

那么该k值就是是模型的最佳K值(对于不同的数据集,它将有所不同)。

该曲线称为“ 肘形曲线”(因为它具有类似肘部的形状),通常用于确定k 值。

你还可以使用网格搜索技术来查找最佳k值。

我们将在下一节中实现这一点。

5.处理数据集(Python代码)到目前为止,你应该清楚的了解这个算法。

我们现在将继续在数据集上实现该算法。

我使用Big Mart销售数据集来进行代码实现,你可以从此下载它,邀请码为b543。

1.阅读文件import pandas as pddf = pd.read_csv('train.csv')df.head()2.计算缺失值df.isnull().sum()#输入Item_weight和Outlet_size中缺少的值mean = df['Item_Weight'].mean() #imputing item_weight with mean df['Item_Weight'].fillna(mean inplace =True)mode = df['Outlet_Size'].mode() #imputing outlet size with modedf['Outlet_Size'].fillna(mode[0] inplace =True)3.处理分类变量并删除id列df.drop(['Item_Identifier' 'Outlet_Identifier'] axis=1 inplace=True) df = pd.get_dummies(df)4.创建训练集和测试集from sklearn.model_selection import train_test_splittrain test = train_test_split(df test_size = 0.3)x_train = train.drop('Item_Outlet_Sales' axis=1)y_train = train['Item_Outlet_Sales']x_test = test.drop('Item_Outlet_Sales' axis = 1)y_test = test['Item_Outlet_Sales']5.预处理 - 扩展功能from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler(feature_range=(0 1))x_train_scaled = scaler.fit_transform(x_train)x_train = pd.Datafrxxxxame(x_train_scaled)x_test_scaled = scaler.fit_transform(x_test)x_test = pd.Datafrxxxxame(x_test_scaled)6.查看不同K值的错误率#导入所需要的包from sklearn import neighborsfrom sklearn.metrics import mean_squared_errorfrom math import sqrtimport matplotlib.pyplot as plt%matplotlib inlinermse_val = [] #存储不同K值的RMSE值for K in range(20):K = K+1model = neighbors.KNeighborsRegressor(n_neighbors = K)model.fit(x_train y_train) #合适的模型pred=model.predict(x_test) #对测试集进行测试error = sqrt(mean_squared_error(y_testpred)) #计算RMSE值rmse_val.append(error) #存储RMSE值print('RMSE value for k= ' K 'is:' error)输出:RMSE value for k = 1 is: 1579.8352322344945RMSE value for k = 2 is: 1362.7748806138618RMSE value for k = 3 is: 1278.868577489459RMSE value for k = 4 is: 1249.338516122638RMSE value for k = 5 is: 1235.4514224035129RMSE value for k = 6 is: 1233.2711649472913RMSE value for k = 7 is: 1219.0633086651026RMSE value for k = 8 is: 1222.244674933665RMSE value for k = 9 is: 1219.5895059285074RMSE value for k = 10 is: 1225.106137547365RMSE value for k = 11 is: 1229.540283771085RMSE value for k = 12 is: 1239.1504407152086RMSE value for k = 13 is: 1242.3726040709887RMSE value for k = 14 is: 1251.505810196545RMSE value for k = 15 is: 1253.190119191363RMSE value for k = 16 is: 1258.802262564038RMSE value for k = 17 is: 1260.884931441893RMSE value for k = 18 is: 1265.5133661294733RMSE value for k = 19 is: 1269.619416217394RMSE value for k = 20 is: 1272.10881411344#根据K值绘制RMSE值curve = pd.Datafrxxxxame(rmse_val) #elbow curvecurve.plot()正如我们所讨论的,当我们取k = 1时,我们得到一个非常高的RMSE值。

相关文档
最新文档