机器学习笔记(一)——神奇的"K"

本文介绍了机器学习中与'K'相关的基础算法,包括K-近邻(KNN)算法和K-means聚类算法。KNN算法简单但计算量大,涉及数据预处理、距离计算和分类结果评价。K-means通过计算距离对数据进行聚类,讨论了数据处理、距离模型和聚类结果评价,同时提出了优化策略。文章深入浅出地探讨了两种算法的工作原理及其优缺点。
摘要由CSDN通过智能技术生成

机器学习中有很多算法,其中有一个很神奇的字母“K”,有许多基础算法与之有关,比如K近值分类算法、K近值回归算法、K-means聚类算法等等。在这里,我将对此做一个总结,希望对自己、对大家都能够有所帮助!

一、K-近邻算法

老实说,KNN算法应该算是分类算法中最简单的一种,很适合机器学习入门算法介绍。
KNN算法的原理很简单,对于某需要预测的分类点X,计算其与训练集中所有数据点之间的距离,从中选取距离最小的K个点,其中类别标签数量最多的即作为该分类点X的类别!
怎么样,听起来是不是很简单。是的,这种简单的分类算法不仅精度不差,而且对异常值不敏感;但是遗憾的是它的计算量太大,对于处理大规模数据十分吃力。
我们一步步来拆解这种算法:

(一) 数据集处理

KNN算法是通过比较各个测试集数据点与待预测点之间的距离来做判别,但是对于单个点的不同特征而言,所进行比较的标尺是不同的,比如说对于特征(身高cm,体重kg),很明显身高的值普遍大于体重的值,因此在距离计算过程中很容易导致体重对结果产生的影响力更加大。因此在导入数据集时,需要对数据集中的各个数据进行预处理,以下是两种归一化处理的方法:
1.最值归一化
r e s u l t = X − X m i n X m a x − X m i n result = \frac{X - X_{min}}{X_{max} - X_{min}} result=XmaxXminXXmin
2.均值方差归一化
r e s u l t = X − X m e a n X v a r result = \frac{X - X_{mean}}{X_{var}} result=XvarXXmean

import numpy as np
#均值方差归一化
class StandardScaler(object):
	def __init__(self):         
		self._mean = None;
		self._scale = None;
		
	def fit(self,X):
		self._mean = np.array([np.mean(X[:,i]) for i in range(X.shape[1])])     #求出数据集每列的均值
		self._scale = np.array([np.std(X[:,i]) for i in range(X.shape[1])])     #求出数据集每列的方差
		return self;
		
	def transform(self,X):
		x = np.empty(X.shape,dtype=float);
		for i in range(X.shape[1]):
			x[:,i] = 1.0*(X[:,i]-self._mean[i])/self._scale[i]         #归一化处理
		return x;
	
#最值归一化
class Normalization(object):
	def __init__(self):
		self._min = None;
		self._max = None;
	
	def fit(self,X):
		self._min = np.array([np.min(X[:,i] for i in range(X.shape[1]))]);     #求出数据集每列的最小值
		self._max = np.array([np.max(X[:,i] for i in range(X.shape[1]))]);     #求出数据集每列的最大值
		
	def transform(self,X):
		x = np.empty(X.shape,detype = float);
		for i in range(X.shape[1]):
			x[:,i] = 1.0 * (X[:,i] - self._min[i])/(self._max[i] - self._min[i]);     #归一化处理
		return x;
(二)距离的把握

KNN算法的核心在于如何计算数据集中的各个数据点与待预测点之间的距离。
在KNN算法中最常用的有三种距离模型,当然还有其他很多有用的距离模型,笔者才学有限,就不多介绍了。
1. 曼哈顿距离
设有两个n维向量点X&Y,两者之间的曼哈顿距离为:
d i s t a n c e = ∑ i = 1 n ∣ ∣ X i − Y i ∣ ∣ distance = \sum_{i=1}^n ||X_i - Y_i|| distance=i=1nXiYi
2.欧式距离
依然是两个n维向量点X&Y,二者之间的欧式距离为:
d i s t a n c e = ( ∑ i = 1 n ( X i − Y i ) 2 ) 1 2 distance =( \sum_{i=1}^n (X_i - Y_i)^2 )^{\frac{1}{2}} distance=(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值