首页 > 其他 > 详细

机器学习.2

时间:2019-11-25 23:59:20      阅读:163      评论:0      收藏:0      [点我收藏+]

手写knn算法:

  在看knn算法之前,先去简单学习了一下python的使用,简单了解了一下python相关知识,发现python序列与c++里的数组有一定的差别,

一、python学习。

列表、元组、字符串支持双向索引,第一个元素下标为0,第二个元素下标为1,以此类推;最后一个元素下标为-1,倒数第二个元素下标为-2,以此类推。

技术分享图片

字符串:索引运算符[ i ]得到下标为i的字符,切片运算符[ i : j]得到从下标i到下标j-1的子串第一个字符索引为 0,最后一个字符索引为-1加号(+)用于字符串连接运算,星号(*)用于字符串复制。

列表:索引运算符[ i ]得到下标为i的元素,切片运算符[ i : j]得到从下标i到下标j-1的子集,第一个元素索引为 0,最后一个元素索引为-1。

列表常用方法:

技术分享图片

 

 

 

二、学习手写knn算法

首先:

iris = datasets.load_iris()
x = iris.data
y = iris.target
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=2003)

这里我们导入的数据集叫做iris数据集

x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=2003)

X存储的是数据的特征,y存储的每一个样本的标签或者分类,train_test_split来把数据分成了训练集和测试集。

 

 

 

 插入欧式距离公式来计算任意两点之间的距离:

def euc_dis(instance1, instance2):
diff = instance1 - instantce2
diff = diff ** 2
dist = sum(diff) ** 0.5
return dist

欧式距离也称欧几里得距离,是最常见的距离度量,衡量的是多维空间中两个点之间的绝对距离。

也可以理解为:m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离

下面是具体的计算公式:技术分享图片

 

 

def knn_classify(x, y, testInstance, k):
    dis = []
    for i in x
        dis.apend(euc_dis(i,testInstance))
    maxIndex = map(dis.index,heapq.nsmallest(k,dis))
    maxY = []
    for i in maxIndex
        maxY.append(y[i])
    return max(maxY,key = maxY.count)

knn的算法实现,求testInstance到每个x点的距离并存于列表dis中,heapq该模块提供了堆排序算法的实现。堆是二叉树,最大堆中父节点大于或等于两个子节点,最小堆父节点小于或等于两个子节点。

heapq.nsmallest(k,dis)求出最小的k个距离的下标,使用堆来求最小的k。map模块map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function
函数,返回包含每次 function 函数返回值的新列表。返回出现次数最多的标签值。
prediction = [knn_classify(x_train, y_train, data, 3)for data in x_test]
correct = np.count_nonzero((prections == y.test) == true)

比较手写knn算法及原本数据库,算出准确率。

 

三、心得体会

  刚开始其实看knn手写算法时,很多东西都不是很理解,根据同学们给的资料,自己简单的看看,学习了一下,再去看代码,慢慢理解每一步的含义,不懂得地方在百度查询相关代码,一个个解决问题,基本理解了knn算法代码的意思,其实很简单,就是根据它原本的数据库,写一个预算代码,对比预测目标与对应目标的相似度来判断是否正确,自己对于python的用法还是比较陌生,还需要多加练习才能更加理解,多去学习才能进步。

 

技术分享图片

 

机器学习.2

原文:https://www.cnblogs.com/ydh52/p/11932185.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!