上期我们介绍了拟合问题,我们发现机器学习无外乎两个问题,分类问题和回归问题,今天我们就简单的了解一下KNN算法及此算法涉及的一些概念,这个算法涉及的数学知识很少,可以说是机器学习算法中理论最简单,最好理解的算法。
💡首先我们通过案例更好的理解KNN算法
上图中每一个数据点代表一个肿瘤病历:
疑问:新来了一个病人(下图绿色的点),如何判断新来的病人(即绿色点)是良性肿瘤还是恶性肿瘤?
💡解决方法:k-近邻算法的做法如下:
(1)取一个值k=3(k值后面介绍,现在可以理解为算法的使用者根据经验取的最优值)
(2)在所有的点中找到距离绿色点最近的三个点
(3)让最近的点所属的类别进行投票
(4)最近的三个点都是蓝色的,所以该病人对应的应该也是蓝色,即恶性肿瘤。
总结一下
✒️✒️K-近邻算法属于哪类算法?可以用来解决监督学习中的分类问题 ✒️✒️算法的思想:通过K个最近的已知分类的样本来判断未知样本的类别
KNN三要素:距离度量,K值选择,分类决策准则
💥💥稍后我们还会在介绍完KNN算法之后详细的说距离的度量方法
样本中有多个特征,每一个特征都有自己的定义域和取值范围,他们对距离计算也是不同的,如取值较大的影响力会盖过取值较小的参数。因此,为了公平,样本参数必须做一些归一化处理,将不同的特征都缩放到相同的区间或者分布内。
通过对原始数据进行变换,把数据映射到(默认为[0,1])之间。
❤️🔥❤️🔥scikit-learn 中实现归一化的 API:
💢💢注意我们整个机器学习的环境需要很多库的帮助,具体我们可以去搜索页面搜索“Anaconda安装教程”去配置我们的编译环境
from sklearn.preprocessing import MinMaxScaler
def test():
# 1. 准备数据
data = [[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]]
# 2. 初始化归一化对象
transformer = MinMaxScaler()
# 3. 对原始特征进行变换
data = transformer.fit_transform(data)
# 4. 打印归一化后的结果
print(data)
归一化受到最大值与最小值的影响,这种方法容易受到异常数据的影响, 鲁棒性较差,适合传统精确小数据场景
💥💥scikit-learn 中实现标准化的 API:
from sklearn.preprocessing import StandardScaler
def test():
# 1. 准备数据
data = [[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]]
# 2. 初始化标准化对象
transformer = StandardScaler()
# 3. 对原始特征进行变换
data = transformer.fit_transform(data)
# 4. 打印归一化后的结果
print(data)
对于标准化来说,如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大
🧡🧡友友们可能发现本期并没有太多的介绍有关KNN算法的API,而大多的去解释归一化和标准化,而贯穿整个机器学习的目的就是对于数据的处理和分析,归一化和标准化能更好的帮助我们,所以归一化和标准化是我们入门的基本功和必需品,当然机器学习还包含如何去更好的构建模型去自己预测一些数据等,所以友友们任重而道远呀,我们一起加油,下期我们就正式介绍KNN算法及相关实战案例。🧡🧡