什么是机器学习分类算法?【K-近邻算法(KNN)、交叉验证、朴素贝叶斯算法、决策树、随机森林】

本文深入介绍了机器学习中的分类算法,包括K-近邻(KNN)、交叉验证以及朴素贝叶斯算法。讨论了KNN的距离公式、交叉验证的超参数搜索和网格搜索,以及朴素贝叶斯的贝叶斯公式和拉普拉斯平滑。此外,还探讨了决策树和随机森林的原理与应用场景,总结了各种算法的优缺点和适用范围。
摘要由CSDN通过智能技术生成

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

1、K-近邻算法(KNN)

1.1 定义

(KNN,K-NearestNeighbor)

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

1.2 距离公式

两个样本的距离可以通过如下公式计算,又叫欧式距离。

简单理解这个算法:

这个算法是用来给特征值分类的,是属于有监督学习的领域,根据不断计算特征值和有目标值的特征值的距离来判断某个样本是否属于某个目标值。

可以理解为根据你的邻居来判断你属于哪个类别

1.3 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方法的值来决定最合适的算法。 (不同实现方式影响效率)
  • 其中的你指定的邻居个数实际上是指的当算法计算完一个样本的特征值距离所有其他样本的目标值的距离之后,会根据距离的大小排序,而你的指定的这个参数就是取前多少个值作为判定依据。
    • 比如说你指定邻居是5那么如果5个邻居里3个是爱情片,那么可以说这个样本属于爱情片。

1.4 案例(预测签到位置)

from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import pandas as pd

def knncls():
    """
 K近邻算法预测入住位置类别
 row\_id,x,y,accuracy,time,place\_id
 用户ID,坐标x,坐标y,准确度,时间,位置ID
 :return:
 """
    # 一、处理数据以及特征工程
    # 1、读取收,缩小数据的范围

    data = pd.read_csv("./train.csv")

    # 数据逻辑筛选操作 df.query()
    data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")

    # 删除time这一列特征
    data = data.drop(['time'], axis=1)

    print(data)

    # 删除入住次数少于三次位置
    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)]

    # 3、取出特征值和目标值
    y = data['place\_id']
    # y = data[['place\_id']]

    x = data.drop(['place\_id', 'row\_id'], axis=1)

    # 4、数据分割与特征工程?

    # (1)、数据分割
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

    # (2)、标准化
    std = StandardScaler()

    # 队训练集进行标准化操作
    x_train = std.fit_transform(x_train)
    print(x_train)

    # 进行测试集的标准化操作
    x_test = std.fit_transform(x_test)

    # 二、算法的输入训练预测
    # K值:算法传入参数不定的值 理论上:k = 根号(样本数)
    # K值:后面会使用参数调优方法,去轮流试出最好的参数[1,3,5,10,20,100,200]
    knn = KNeighborsClassifier(n_neighbors=1)

    # 调用fit()
    knn.fit(x_train, y_train)

    # 预测测试数据集,得出准确率
    y_predict = knn.predict(x_test)

    print("预测测试集类别:", y_predict)

    print("准确率为:", knn.score(x_test, y_test))

    return None

if __name__ == '\_\_main\_\_':
    print()

返回结果:

            row_id       x       y  accuracy    place_id
600            600  1.2214  2.7023        17  6683426742
957            957  1.1832  2.6891        58  6683426742
4345          4345  1.1935  2.6550        11  6889790653
4735          4735  1.1452  2.6074        49  6822359752
5580          5580  1.0089  2.7287        19  1527921905
...            ...     ...     ...       ...         ...
29100203  29100203  1.0129  2.6775        12  3312463746
29108443  29108443  1.1474  2.6840        36  3533177779
29109993  29109993  1.0240  2.7238        62  6424972551
29111539  29111539  1.2032  2.6796        87  3533177779
29112154  29112154  1.1070  2.5419       178  4932578245

[17710 rows x 5 columns]
[[-0.39289714 -1.20169649  0.03123826]
 [-0.52988735  0.71519711 -0.08049297]
 [ 0.84001481  0.82113447 -0.73225846]
 ...
 [-0.64878452 -0.59040929 -0.20153513]
 [-1.37250642 -1.33053923 -0.44361946]
 [-0.11503962 -1.30477068 -0.22946794]]
预测测试集类别: [4932578245 3312463746 8048985799 ... 1285051622 2199223958 678038
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

[虚幻私塾】

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

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

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

打赏作者

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

抵扣说明:

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

余额充值