loveliyifeng 2021-06-29 09:09 采纳率: 100%
浏览 88
已采纳

KNN--K近邻算法

在二维平面上,分别定义中心点(均值)和离散程度(方差)不同,且符合正态分布的两个集合(5000个离散点),利用K-近邻算法进行分类。

  • 写回答

2条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-06-29 10:24
    关注

    设两个集合的中心点分别为p0和p1表示二元组,方差分别为v0和v1(开方得到标准差),借助于numpy的随机化抽样子模块random很容易得到两个集合,合并为一个样本集。与之对应的标签集也不难制作。之后按10%的比例抽取测试集,其余作为训练集(事实上,k-近邻分类无需训练,训练集仅作为经验数据)。演示代码如下。

    >>> import numpy as np
    >>> from sklearn.neighbors import KNeighborsClassifier # 导入K-近邻分类器
    >>> from sklearn.model_selection import train_test_split as tsplit
    >>> p0, p1 = (-1,-1), (1,1)
    >>> v0, v1 = 0.8, 1.2
    >>> xs_0 = np.random.normal(loc=p0[0], scale=pow(v0,0.5), size=5000)
    >>> ys_0 = np.random.normal(loc=p0[1], scale=pow(v0,0.5), size=5000)
    >>> label_0 = np.zeros(5000, dtype=np.int32)
    >>> xs_1 = np.random.normal(loc=p1[0], scale=pow(v1,0.5), size=5000)
    >>> ys_1 = np.random.normal(loc=p1[1], scale=pow(v1,0.5), size=5000)
    >>> label_1 = np.ones(5000, dtype=np.int32)
    >>> X = np.vstack((np.stack((xs_0, ys_0), axis=1), np.stack((xs_1, ys_1), axis=1)))
    >>> y = np.hstack((label_0, label_0))
    >>> X.shape, y.shape
    ((10000, 2), (10000,))
    >>> X_train, X_test, y_train, y_test = tsplit(X, y, test_size=0.1) # 拆分
    >>> m = KNeighborsClassifier() # 实例化模型。n_neighbors参数指定k值,默认k=5
    >>> m.fit(X_train, y_train) # 模型训练
    KNeighborsClassifier()
    >>> score = m.score(X_test, y_test) # 模型测试精度(介于0~1之间)
    >>> score
    1.0

    两个集合距离远,方差小,没有重合区域,所以测试结果100%正确。题主可以选择不同的中心点和方差,让数据点适度重合,就可以看到模型精度不会是100%。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏