机器学习之KNN算法
来源:互联网 发布:淘宝要交保证金吗2017 编辑:程序博客网 时间:2024/04/29 09:32
在几位志同道合的小伙伴的带领下,开始了机器学习的路程,然而一切并不是想象的那么简单,因此本文记录了自己的学习路程,希望还能坚持做好这件事。
KNN算法是机器学习中属于比较简单的算法,容易理解和阅读。
1.KNN的应用
客户流失预测、欺诈侦测等(更适合于稀有事件的分类问题)
2.优缺点
- 优点:这是一个简单有效的算法,易于理解,易于实现;
- 缺点:必须保存全部数据集,如果训练集过大,消耗大量的存储空间,对每个数据计算距离值,实际使用很耗时。
3.距离计算方式
-欧式距离
-夹角余弦(适合文本分析)
-曼哈顿距离
-切比雪夫距离
4.算法实现
对未知类别属性的数据集中的每个点依次执行以下操作:
(1)计算已知类别数据集中的点与当前点之间的距离;
(2)按照距离递增次序排序;
(3)选取与当前点距离最小的走个点;
(4)确定前灸个点所在类别的出现频率;
(5)返回前女个点出现频率最高的类别作为当前点的预测分类。
一个简单的例子,用Python语言实现KNN算法,数据与后面将要写的其他算法使用一样的数据。
训练数据
Tid House Marriage Income Borrower1 Yes Single 125K No2 No Married 100K No3 No Single 70K No4 Yes Married 120K No5 No Divorced 95K Yes6 No Married 60K No7 Yes Divorced 220K No8 No Single 85K Yes9 No Married 75K No10 No Single 90K Yes
测试数据
Tid House Marriage IncomeTest No Married 120K
准备数据
def loadDataSet_train(path_read): df = pd.read_csv(path_read, sep='\t', header=0, dtype=str, na_filter=False) group = np.array(np.matrix(df[['House','Marriage','Income']])) label = np.array(np.matrix(df["Borrower"])) y = np.zeros(group.shape) y[group=='Yes']=1 y[group=='Married']=1 y[group=='Divorced']=2 for i in group[:,2]: y[group==i]=i[0:-1] #print(i[0:-1]) labels=['No', 'No', 'No', 'No', 'Yes', 'No', 'No', 'Yes', 'No', 'Yes'] return y,labelsdef loadDataSet_test(path): df = pd.read_csv(path, sep='\t', header=0, dtype=str, na_filter=False) group = np.array(np.matrix(df[['House','Marriage','Income']])) return group
数据分类,参考机器学习代码
def classify(inx,dataSet,label,k): dataSetSize = dataSet.shape[0] diffMat = np.tile(inx, (dataSetSize,1)) - dataSet sqDiffMat = diffMat ** 2 sqDistance = sqDiffMat.sum(axis=1) distance = sqDistance ** 0.5 sortedDistIndicies = distance.argsort() classCount={} for i in range(k): voteIlabel = label[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0]
选取不同的k值发现对结果的影响还是很大的,训练数据毕竟很少。这只是方便理解算法,简单的实现,后面还会继续学习机器学习其他的算法,代码尝试着自己写一写,之前没使用过Python语言,也对机器学习了解甚少,只在研究生阶段开始学习,代码以及其他地方不及之处,希望大家多多交流。
1 0
- 机器学习之kNN算法
- 机器学习之KNN 算法
- 机器学习之KNN算法
- 机器学习之KNN算法
- 机器学习之kNN算法
- 机器学习之knn算法
- 机器学习之KNN 算法
- 机器学习之KNN算法
- 机器学习算法之KNN
- 机器学习之KNN算法
- 机器学习之KNN算法
- 机器学习算法之KNN算法
- 机器学习实战之KNN算法详解
- 机器学习之PYTHON实现KNN算法
- 机器学习 之 KNN 算法 小结分析
- python 机器学习之kNN算法
- 机器学习实战之KNN算法
- 机器学习实战之KNN算法
- 【转】CSS 专业技巧收集
- c语言实现HACK汇编编译器(一)
- (MongoDB系列之合并MongoDB子文档
- 传值方式(正向传值) 代理 block块 通知
- Swift UIButton 和 UILabel 的详细解释和创建使用
- 机器学习之KNN算法
- java中的class 与Class , A.class 与 A.getClass() 到底有什么 不同
- MySQL如何记录binlog(转)
- 电子水墨屏-原理
- Java算法---求面积
- Material Design之Toolbar
- 【剑指offer】之字符串转整数
- Android 代码中杀死进程
- SQL笔记(9)_第九章 汇总查询得到的数据