资讯详情

k近邻算法_机器学习分类算法之k近邻算法

本文介绍了机器学习入门算法-k将使用近邻算法demo演示机器学习分类算法。

在首先介绍算法时,首先回顾分类和回归之间的区别。文章分类识别也是如此,如1代表体育,2代表技术,3代表娱乐属于分类问题,需要使用分类算法。预测票房、股票等具体价值,这是连续的,属于回归问题,需要使用回归算法。在机器学习中添加两个重要的概念:转换器和估计器。

转换器和估计器

转化器

ca452274599108da39758d0dd98b9ef0.png

转换器示意图

从代码层面来说,它是继承的Transformer这类是转化器。

实例演示

api 介绍fit_transform():输入数据直接转换fit(): 输入数据,计算平均值、方差等,但不做数据transform(): 转换数据

fit_transform()执行两个步骤,fit和transform,fit指定转化标准,transform跟fit转化制定的标准。 out【3】和out【6】执行结果一致,但与out【8】不一致,因为它的fit标准变了。

类图关系

StandardScaler继承了TransformerMixin,实例化出来的被称为转换器。


估计器

sklearn实现机器学习算法-估计器

在sklearn中,估计器(estimator)分类器和回归器都是重要的角色estimator,是实现算法的一类API

1.用于分类的估计器:sklearn.neighborsk-近邻算法?sklearn.naive_bayes      贝叶斯?sklearn.linear_model.LogisticRegression     逻辑回归2.用于回归的估计器:sklearn.linear_model.LinearRegression     线性回归?sklearn.linear_model.Ridge      岭回归 

估计器的使用过程

分类算法-k近邻算法

概念

算法概念示例图

图中有一个人不知道自己属于哪个区域,但他知道别人在哪里和距离。用最近的人所在的区域来表示你所在的区域。这是法的核心思想。

定义:如果样本在特征空间中,样本也属于这一类。KNN算法最早是由Cover和Hart一种分类算法。

概念案例示意图

这里的特点是打斗镜头和接吻镜头,目标值是爱情片还是动作片。然后用k近邻算法找出它的距离未知电影。

两个样本之间的距离可以通过以下公式计算,也称为欧式距离。

算法公式

但如果它的特点很大,它会影响数据的准确性。


k-近邻算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数

algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute计算最近邻居的算法可以选择}ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto将尝试根据传递给fit决定最合适算法的方法值。 (影响效率的实现方式不同)


实例

原题目网站:https://www.kaggle.com/c/facebook-v-predicting-check-ins

根据提供的信息预测用户的位置

问题描述

实例数据 https://pan.baidu.com/s/1BGKkCagNT8q81M-xgyW64w

密码 b2n4

数据描述

from sklearn.datasets import load_iris, fetch_20newsgroups, load_bostonfrom sklearn.model_selection import train_test_split, GridSearchCVfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.preprocessing import StandardScalerfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.metrics import classification_reportfrom sklearn.feature_extraction import DictVectorizerfrom sklearn.tree import DecisionTreeClassifier, export_graphvizfrom sklearn.ensemble import RandomForestClassifierimport pandas as pddef knncls():    """    K-近邻预测用户签到位置    :return:None    """    # 读取数据    data = pd.read_csv("./data/FBlocation/train.csv")    # print(data.head(10))    # 处理数据    # 1.缩小数据,查询数据晒讯    data = data.query ("x > 2.0 & x < 2.25 & y > 2.5 & y < 2.75")    # 处理时间数据    time_value = pd.to_datetime(data['time'], unit='s')    print(time_value)    # 将日期格式转换为 字典格式    time_value = pd.DatetimeIndex(time_value)    # 构造一些特征    data['day'] = time_value.day    data['hour'] = time_value.hour    data['weekday'] = time_value.weekday    # 删除时间戳特征    data = data.drop(['time'], axis=1)    # 删除少于n个目标位置的签到    place_count = data.groupby('place_id').count()    tf = place_count[place_count.row_id > 3].reset_index()    data = data[data['place_id'].isin(tf.place_id)]    # 取出数据中的特征值和目标值    y = data['place_id']    x = data.drop(['place_id'], axis=1)    # 数据分割训练集合测试集    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)    # 特色工程(标准化)    std = StandardScaler()    # 标准化测试集和训练集的特征值    x_train = std.fit_transform(x_train)    x_test = std.transform(x_test)    # 算法过程 # 超参数    knn = KNeighborsClassifier(n_neighbors=5)    # fit, predict,score    knn.fit(x_train, y_train)    # 得出预测结果    y_predict = knn.predict(x_test)    print("预测的标签到位为:", y_predict)    # 得出准确率    print("预测的准确率:", knn.score(x_test, y_test))

提高准确率

没有变标准

标准化之后

去除无用的rowid

调整n_neighbors=6

实例流程:

1、数据集的处理

2、分割数据集

3、对数据集进行标准化

4、estimator流程进行分类预测


注意点

1.k值取多大?有什么影响?

k值取很小:容易受异常点影响;k值取很大:容易受最近数据太多导致比例变化。

2.性能问题

每个样本进行预测都要与所有样本计算欧式距离,导致它的性能非常低下。在我们选择算法的时候,通常要考虑准确率高和不影响机器性能的算法。所以这个算法在实际较少用到。

3.优点

简单,易于理解,易于实现,。估计参数不是KNeighborsClassifier(n_neighbors=5) 里的n_neighbors的参数,这种的参数叫做超参数,而估计参数是算法里面的参数。无需训练,因为与每个样本的距离的都是固定的,所以无需训练。

4.缺点

懒惰算法,对测试样本分类时的计算量大,内存开销大;必须指定K值,K值选择不当则分类精度不能保证。

后续会持续更新由浅入深机器学习的技术文章,有兴趣的朋友可看我之前的文章,关注我随时了解人工智能

标签: 油位传感器xgyw310

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台