《机器学习实战》菜鸟学习笔记(一)

《机器学习实战》终于到手了,开始学习了。由于本人python学的比较挫,所以学习笔记里会有许多python的内容。

1、 python及其各种插件的安装

由于我使用了win8.1 64位系统(正版的哦),所以像numpy 和 matploblib这种常用的插件不太好装,解决方案就是Anaconda-2.0.1-Windows-x86_64.exe 一次性搞定。

2、kNN代码

 1 #-*-coding:utf-8-*-
 2 from numpy import *
 3 import operator
 4
 5 def createDataSet():
 6     group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
 7     labels = [‘A‘,‘A‘,‘B‘,‘B‘]
 8     return group,labels
 9
10 def classify0(inX,dataSet,labels,k):
11     dataSetSize = dataSet.shape[0]
12     diffMat = tile(inX,(dataSetSize,1))-dataSet
13     sqDiffMat = diffMat ** 2
14     sqDistances = sqDiffMat.sum(axis = 1)
15     distances = sqDistances ** 0.5
16     sortedDistIndicies = distances.argsort()  #indices
17     classCount = {}
18     for i in range(k):
19         voteIlabel = labels[sortedDistIndicies[i]]
20         classCount[voteIlabel] = classCount.get(voteIlabel,0)+1
21         #找出最大的那个
22     sortedClassCount = sorted(classCount.iteritems(),
23         key = operator.itemgetter(1),reverse = True)
24     return sortedClassCount[0][0]

这里的疑惑主要出现在:

(1)array与list有什么区别

array 是numpy里面定义的。为了方便计算,比如

1 array([1,2])+array([3,4])
2 [1,2]+[3,4]

执行以下就可以知道他们的差别了

(2)shape[0]返回的是哪一维度的大小(不要嘲笑我小白,我真的不知道)

找到文档看了一下就开朗了。ndarray.shape   “the dimensions of the array. This is a tuple of integers indicating the size of the array in each dimension. For a matrix with n rows and m columns, shape will be (n,m). The length of the shape tuple is therefore the rank, or number of dimensions, ndim.”

(3)tile函数

tile函数是经常使用的函数,用于扩充array。举例:

1 >>> b = np.array([[1, 2], [3, 4]])
2 >>> np.tile(b, 2)
3 array([[1, 2, 1, 2],
4        [3, 4, 3, 4]])
5 >>> np.tile(b, (2, 1))
6 array([[1, 2],
7        [3, 4],
8        [1, 2],
9        [3, 4]])

这下就懂了吧。为什么要用这个函数呢?因为后面两个array要做差,这样做就可以不用使用循环了,典型的空间换时间。那么为什么要做差呢?好吧,因为这是knn算法。

(4)array的sum函数

写到这里,我决定要好好读读numpy文档了。

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=False)

一个sum函数还是挺麻烦的呢

>>> np.sum([[0, 1], [0, 5]], axis=0)
array([0, 6])
>>> np.sum([[0, 1], [0, 5]], axis=1)
array([1, 5])

这样大家都清楚了

(5) 最后一行,return了什么?

表面看起来像是二维数组的第一个元素,但是sortedClassCount是二维数组吗?

写了一个小的验证程序,发现sortedClassCount是一个list,元素是tuple。

L = {1:12,3:4}
sortedL = sorted(L.iteritems(),key=operator.itemgetter(1))
print sortedL
#结果
[(3, 4), (1, 12)]
时间: 2024-10-10 21:43:47

《机器学习实战》菜鸟学习笔记(一)的相关文章

《机器学习实战》学习笔记:k-近邻算法实现

上一学期主要的学习和研究任务是模式识别.信号理论和图像处理,实际上这些领域都与机器学习有或多或少的交集.因此,仍在继续深入阅读<机器学习>.观看斯坦福大学的机器学习课程.在此过程中因为未来课题组项目的要求,需要接触Python,因此选择了<机器学习实战>这本书,同时参考教材和视频一起学习.事实上该书的理论研究不够深入,只能算是练习Python并验证一些著名的机器学习算法的工具书了. 在介绍k-近邻算法之前,对机器学习算法进行简单的分类和梳理:简单来说,机器学习主要分为两大类,有监督

《机器学习实战》学习笔记:支持向量机

该节的内容是支持向量机(SVM, support vectormachine). 这里首先要推荐一下July的SVM三层境界(http://blog.csdn.net/v_july_v/article/details/7624837)由于<机器学习实战>关于SVM一章的内容很多,本节先简单归纳一下关于支持向量机的基础. 一.概念描述 支持向量机,就是通过最大化支持向量到分类超平面之间的分类间隔.分类超平面就是我们想要得到的决策曲面:支持向量就是离分类超平面最近的点,而间隔即为支持向量到分类超平

Python3《机器学习实战》学习笔记

运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一 简单k-近邻算法 1 k-近邻法简介 2 距离度量 3 Python3代码实现 31 准备数据集 32 k-近邻算法 33 整体代码 二 k-近邻算法实战之约会网站配对效果判定 1 实战背景 2 准备数据数据解析 3 分析数据数据可视化 4 准备数据数据归一化 5 测试算法验证分类器 6 使用算法构建完整可用系统 三 k-近邻算法实战之sklearn手写数字识别 1 实战背景 2 Skl

《机器学习实战》学习笔记:利用Adaboost元算法提高分类性能

一. 关于boosting算法的起源 boost 算法系列的起源来自于PAC Learnability(直译过来称为:PAC 可学习性).这套理论主要研究的是什么时候一个问题是可被学习的. 我们知道,可计算性在计算理论中已经有定义,而可学习性正是PAC Learnability理论所要定义的内容.另外,在计算理论中还有很大一部分精力花在研究问题是可计算的时候,其复杂度又是什么样的.因此,在计算学习理论中,也有研究可学习的问题的复杂度的内容,主要是样本复杂度 (Sample Complexity)

《机器学习实战》学习笔记:基于朴素贝叶斯的分类方法

概率是许多机器学习算法的基础,在前面生成决策树的过程中使用了一小部分关于概率的知识,即统计特征在数据集中取某个特定值的次数,然后除以数据集的实例总数,得到特征取该值的概率. 目录: 一.基于贝叶斯理论的分类方法 二.关于朴素贝叶斯的应用场景 三.基于Python和朴素贝叶斯的文本分类 1.准备数据 2.训练算法 3.测试算法 四.小结 以下进入正文: 一.基于贝叶斯理论的分类方法 假设有两类数据组成的数据集如下: 其中,假设两个概率分布的参数已知,并用p1(x,y)表示当前数据点(x,y)属于类

《机器学习实战》学习笔记:Logistic回归&amp;预测疝气病证的死亡率

前言: 生活中,人们经常会遇到各种最优化问题,比如如何在最短时间从一个地点到另外一个地点?如何在投入最少的资金而却能得到最高的受益?如何设计一款芯片使其功耗最低而性能最好?这一节就要学习一种最优化算法--Logistic回归,设计最优化算法的目的依然是用于分类.在这里,Logistic回归的主要思想是根据现有的数据对分类边界线建立回归公式,达到分类的目的.假设我们有一堆数据,需要划一条线(最佳直线)对其分类,这就是Logistic回归的目的. 而"Logistic回归"中的"

《机器学习实战》学习笔记——第2章 KNN

一. KNN原理: 1. 有监督的学习 根据已知事例及其类标,对新的实例按照离他最近的K的邻居中出现频率最高的类别进行分类.伪代码如下: 1)计算已知类别数据集中的点与当前点之间的距离 2)按照距离从小到大排序 3)选取与当前点距离最小的k个点 4)确定这k个点所在类别的出现频率 5)返回这K个点出现频率最高的类别作为当前点的预测分类 1 import numpy as np 2 3 # 读取数据 4 def file2matrix(filename): 5 fr = open(filename

《机器学习实战》学习笔记:基于朴素贝叶斯的垃圾邮件过滤

概率是许多机器学习算法的基础,在前面生成决策树的过程中使用了一小部分关于概率的知识,即统计特征在数据集中取某个特定值的次数,然后除以数据集的实例总数,得到特征取该值的概率. 之前的基础实验中简单实现了朴素贝叶斯分类器,并正确执行了文本分类,这一节将贝叶斯运用到实际场景,垃圾邮件过滤这一实际应用. 实例:使用朴素贝叶斯过滤垃圾邮件 在上一节:http://blog.csdn.net/liyuefeilong/article/details/48383175中,使用了简单的文本文件,并从中提取了字符

《机器学习实战》学习笔记:决策树的实现

决策树是个极其易懂的算法,也是最常用的数据挖掘算法,决策树允许机器根据数据集创造规则,其实这就是机器学习的过程.专家系统中经常会使用到决策树及其变种,而且决策树给出的结果往往可以匹敌在当前领域具有几十年工作经验的专家. 优点:决策树的计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据: 缺点:可能会产生过度匹配的问题: 适用数据类型:数值型和标称型. 这一章节的主要任务是讨论决策树的方法,以及编写构造决策树的python代码,使用递归调用建立分类器,最后可使用Matp

《机器学习实战》学习笔记——k近邻算法

1.numpy中一些函数的用法学习 shape()用法: shape : tuple of ints The elements of the shape tuple give the lengths of the corresponding array dimensions.. shape返回一个元组,依次为各维度的长度.shape[0]:第一维长度,shape[1]:第二维长度. tile()用法: numpy.tile(A, reps) Construct an array by repea