机器学习新手入门(一)之K—近邻算法


前言

现如今机器学习涉及多个领域应用广泛,但很多伙伴仍会问什么是机器学习?日常工作生活如何用到机器学习?简单说机器学习是将大量看似相互不关联的信息整合分类,处理成人们所需的数据信息。

例如,如何判定垃圾邮件,那就是通过侦测到多个重复无用的单词或者特定单词重复出现。机器学习会将无序信息转换为有用信息。下面让大家初识机器学习


一、机器学习基础

1.机器学习的概况及主要任务

对于解决问题的不同,所采用的机器学习的算法也有所不同。本篇文章将帮助读者利用机器学习算法转化为可实际运作的应用程序。

机器学习在实际过程中可解决如何分类的问题,它的主要任务是将表格数据进行合理的分类,另一个任务就是回归,它主要用于预测数值型数据。而分类与回归均属于监督学习,顾名思义就是机器学习的算法知道自己预测的是什么,即为目标变量的分类信息。

与监督学习所对应的是无监督学习,即没有指定的目标变量,没有类别信息,不会给定目标值。在无监督学习中,将数据集合分成类似的对象组成多个类的过程为聚类。将寻找描述数据统计值得过程称为密度估计。其中监督学习普遍使用的算法有:k—近邻算法、线性回归、朴素贝叶斯算法、决策树、支持向量机、ridge回归、lasso最小回归系数估计。无监督学习普遍使用的算法有:k—均值、最大期望算法、dbscan、parzen窗设计。

2、如何选择合适的算法

首先,解决问题过程中必须要使用可靠符合实际的算法,算法的选择必须要考虑两个问题。第一:机器学习算法的目的是什么,我们需要解决问题的是什么。第二:我们需要收集分析的数据是什么。如果选择预测目标变量的值,更适合选择监督学习,否则选择无监督学习。假设确定为监督学习后,需要进一步确定目标变量类型,如果目标变量为离散型,是/否,1/2/3等,可以选择分类器算法;如果目标变量为连续型的数值,如1-999等,需要选择回归型算法;若不需预测目标变量,选择无监督学习算法。如需要将数据分类为离散型的组,使用聚类算法。如需要分析数据与分组的相似程度,使用密度估计算法。

其次,数据问题也扮演了重要的角色。充分了解数据内容是基础,判断特征型变量属于离散型还是连续型变量。缺失值有哪些,缺失的原因是什么。数据的特性将会很大程度的影响到算法计算时间以及效率。

3、机器学习应用步骤

1、收集数据;
2、输入数据;
3、检查数据;
4、训练算法;
5、测试算法;
6、使用算法;
另我们通常使用python作为机器学习的编程算法,请伙伴自行学习python编程语言。

二、K-近邻算法

1.算法简介

本章将通过对k-近邻分类算法、文本文件中的解析和数据导入、使用matplotlib创建扩散图、归一化数值四个方向进行讲解。简单来说k-近邻算法采用的是测量不同特征值之间的距离进行分类,它适用于数据类型为数值型和标称型(标称型即目标变量仅在有限目标集中取值,如真和假)。

K-近邻算法相对其他算法计算精度高,对异常值不敏感,无数据输入假设(无数据的独立性假设),但是其计算复杂度以及空间复杂度较高。

2.算法实现

代码如下:

def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet # tile函数作用见下面的例子
    sqDiffMat = diffMat ** 2
    sqDistances = sqDiffMat.sum(axis = 1)
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort() # argsort返回数组从小到大的索引值
    classCount = {}
    
    for i in range(k):
        votellabel = labels[sortedDistIndicies[i]]
        classCount[votellabel] = classCount.get(votellabel, 0) + 1
sortedClassCount = sorted(classCount.items(), 
key = operator.itemgetter(1), reverse = True)
return sortedClassCount[0][0]

3.使用sklearn实现KNN算法

from sklearn.neighbors import KNeighborsClassifier
# 创建分类器
# n_neighbors=6,指定选取邻居的个数
knn_classifier = KNeighborsClassifier(n_neighbors=6)
# 拟合训练数据
knn_classifier.fit(X_train,y_train)
# 将样本维度变为二维,X_train,y_train为二维数组
x1 = x.reshape(1, -1)
x1
# array([[8.09360732, 3.36573151]])
# 利用knn算法进行预测
y_predict = knn_classifier.predict(x1)
# 预测结果


总结

K—近邻算法是机器学习中唯一一个不需要训练过程的算法,也可以理解数据集就是模型本身。或者说一般将数据都作为训练数据得出一个模型。每当得到新的数据,可以预测新的数据类型。

一般来说分类算法的评估使用准确率(accuracy),准确率越高说明模型效果越好。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值