k-NN 如何做出判断
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 6 课,共 58 课。
本章将带你深入了解 k-NN。学完后,你就能为任意数据绘制它的区域图,就像这张展示温和与辣味辣椒的图一样:
要给一个新的辣椒分类,k 近邻会找出与它距离最近的 k 个训练辣椒,并由它们投票:
最近意味着距离最小,也就是你在单元 2 中遇到的那个概念。你来选择 k:
model = KNeighborsClassifier(n_neighbors=5)n_neighbors 是 k,默认值为 5,除非你另有说明。只有两个类别时,奇数 k 永远不会出现平票。
挑战
简单一个天文学俱乐部根据温度和星等,将 stars.csv 中的恒星分为矮星和巨星。初始代码会读取一颗新恒星和 k。
- 手动找出距离最近的 k 颗恒星:添加
distance列,然后排序。 - 输出其中有多少颗是巨星,然后输出投票结果。
- 使用 k 值相同、基于所有恒星训练的 k-NN 模型进行检查。
对于另一个俱乐部的一颗恒星,且 k = 5:
Giants among the nearest 5: 4
By hand: giant
Model: giant亲手试试
import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
# 每颗恒星占一行:温度以千开尔文为单位,星等(数值越小越亮),以及属于矮星还是巨星
stars = pd.read_csv("stars.csv")
X = stars[["temp_kK", "magnitude"]]
y = stars["type"]
# 新恒星和 k
temp = float(input())
mag = float(input())
k = int(input())
new_star = pd.DataFrame({"temp_kK": [temp], "magnitude": [mag]})
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
监督学习中的所有课
自己练习: Python 在线编译器