分享

【机器学习实战】读书笔记 - (1)

本帖最后由 PeersLee 于 2016-4-23 10:12 编辑
问题导读:

1.如何在Windows 7 上搭建机器学习的python 环境?
2.如何区分数据挖掘中的聚类和分类?
3.如何应用K-近邻算法进行分类?
4.如何安装matplotlib(win32、python2.7)?







解决方案:

在Windows 7 上安装python 2.7(32bit) 和 python 3.5(32bit)并安装相应的numpy 库:

  • 在win 7 上安装python 2.7(32bit)和 python 3.5(32bit)


(1)下载相应的安装包(https://www.python.org/downloads/
云盘分享:



(2)傻瓜式安装

(3)配置环境变量:
将路径[mw_shl_code=bash,false];C:\Python351;C:\Python351\Scripts[/mw_shl_code]拷贝到Path 中,这里只配 python 3.5






(1)numpy-1.9.2-win32-superpack-python2.7.exe 直接安装
安装路径:C:\Python27\Lib\site-packages\

(2)numpy-1.10.4+mkl-cp35-cp35m-win32.whl 安装方式

【1】将C:\Python351\Scripts 加入环境变量 ,再看一下pip 是否加入环境变量:

此时默认python 版本是 python3.5



【2】安装:pip install E:\numpy-1.10.4+mkl-cp35-cp35m-win32.whl

注:如果提示需要升级 pip 版本则按照提示升级 pip 版本即可



【3】测试(python 2.7 numpy 与 python 3.5相同):





推荐1:【python】python入门篇:python安装和环境配置、pycharm安装、第一个python程序hello world
推荐2:最全Pycharm教程





在数据挖掘技术中分类和聚类很容易让人混淆。分类和聚类是有区别的,区分如下:


1.分类


  分类是数据挖掘中的一项非常重要的任务,利用分类技术可以从数据集中提取描述数据类的一个函数或模型(也常称为分类器),并把数据集中的每个对象归结到某个已知的对象类中。从机器学习的观点,分类技术是一种有指导的学习,即每个训练样本的数据对象已经有类标识,通过学习可以形成表达数据对象与类标识间对应的知识。从这个意义上说,数据挖掘的目标就是根据样本数据形成的类知识并对源数据进行分类,进而也可以预测未来数据的归类。分类具有广泛的应用,例如医疗诊断、信用卡的信用分级、图像模式识别。

  分类挖掘所获的分类模型可以采用多种形式加以描述输出。其中主要的表示方法有:分类规则、决策树、数学公式和神经网络。另外,最近又兴起了一种新的方法—粗糙集,其知识表示采用产生式规则。

2.聚类


  与分类技术不同,在机器学习中,聚类是一种无指导学习。也就是说,聚类是在预先不知道欲划分类的情况下,根据信息相似度原则进行信息聚类的一种方法。聚类的目的是使得属于同类别的对象之间的差别尽可能的小,而不同类别上的对象的差别尽可能的大。因此,聚类的意义就在于将观察到的内容组织成类分层结构,把类似的事物组织在一起。通过聚类,人们能够识别密集的和稀疏的区域,因而发现全局的分布模式,以及数据属性之间的有趣的关系。

  数据聚类分析是一个正在蓬勃发展的领域。聚类技术主要是以统计方法、机器学习、神经网络等方法为基础。比较有代表性的聚类技术是基于几何距离的聚类方法,如欧氏距离、曼哈坦距离、明考斯基距离等。聚类分析广泛应用于商业、生物、地理、网络服务等多种领域。


注:转自http://fpcheng.blog.51cto.com/2549627/778119




k-近邻算法(K Nearest Neighbor 算法):

  • 概述:

简单的说,k-近邻算法采用测量不同特征值之间的距离方法进行分类。

存在一个样本数据集合, 也称作训练样本集, 并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。 输人没有标签的新数据后, 将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据( 最近邻) 的分类标签。



  • k -近邻算法的一般流程


(1) 收集数据:可以使用任何方法。
(2) 准备数据:距离计算所需要的数值,最好是结构化的数据格式。
(3) 分析数据:可以使用任何方法。
(4) 训练算法:此步驟不适用于 1 近邻算法。
(5) 测试算法:计算错误率。
(6) 使用算法:首先需要输入样本数据和结构化的输出结果,然后运行K-近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。



  • 实例:

(1)准备:使用python 导入数据


[1]创建 KNN.py 代码模块

KNN.py:
[mw_shl_code=python,true]from numpy import *
import operator

def createDataSet():
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return group, labels[/mw_shl_code]

[2]创建数据集

进入创建 KNN.py 代码块的目录
[mw_shl_code=applescript,true]cd f:\py
f:
[/mw_shl_code]

进入python2.7
[mw_shl_code=applescript,true]python[/mw_shl_code]

导入该程序模块
[mw_shl_code=applescript,true]import kNN[/mw_shl_code]

创建数据集
[mw_shl_code=applescript,true]group,labels = kNN.createDataSet()[/mw_shl_code]

检验是否创建数据集

2016-04-08_165411.png

该数据集如图
2016-04-08_165517.png

(2)python 实现 k-近邻算法 将每组数据划分到某个类中


对未知类别属性的数据集中的每个点依次执行以下操作:
(1) 计算已知类别数据集中的点与当前点之间的距离;
(2) 按照距离递增次序排序;
(3) 选取与当前点距离最小的走个点;
(4) 确定前灸个点所在类别的出现频率;
(5) 返回前女个点出现频率最高的类别作为当前点的预测分类。


将classify_0函数添加到 kNN.py 中:

[mw_shl_code=python,true]def classify_0(inX, data_set, lables, k):    data_set_size = data_set.shape[0]
    diff_mat= tile(inX,(data_set_size,1)) - data_set
    sq_diff_mat = diff_mat**2
    sq_distances = sq_diff_mat.sum(axis = 1)
    distances = sq_distances**0.5
    sorted_dist_indicies = distances.argsort()
    class_count= {}
    for i in range(k):
        vote_label = lables[sorted_dist_indicies]
        class_count[vote_label] = class_count.get(vote_label,0) + 1
    sorted_class_count = sorted(class_count.iteritems(), key=operator.itemgetter(1), reverse=True)
    return sorted_class_count[0][0]
[/mw_shl_code]

[mw_shl_code=applescript,true]reload(kNN)[/mw_shl_code]

2016-04-08_174837.png

(3)补充的知识点

线性相关:
在线性代数里,矢量空间的一组元素中,若没有矢量可用有限个其他矢量的线性组合所表示,则称为线性无关或线性独立(linearly independent),反之称为线性相关(linearly dependent)。

维度相关概念:
在线性空间V 中,存在n 个元素 a1 a2 a3 ... an满足以下条件:
(1) a1 a2 a3 ... an 线性无关
(2) V 中任意一个元素 a 可以用a1 a2 a3 ... an 表示



a1 a2 a3 ... an 成为线性空间的一个基,n 成为线性空间的 维度,只含有0 元素的线性空间 没有基,规定他的维度为0。

维数为 n的线性空间 被称为n 维线性空间,记作 Vn

矩阵长度:
矩阵最长边。

矩阵的第一维度:
e.shape[0]
有多少行;

矩阵的第二维度:
e.shape[1]
有多少列;

numpy tile()函数:
tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组。比如tile(A,n),功能是将数组A重复n次,构成一个新的数组n 是维度(第一维度,第二维度 ... )

笛卡尔积:
所有可能有序对

元组:
笛卡尔积中每一个元素

sum函数:
import numpy as np
np.sum([[0,1,2],[2,1,3],axis=1)的结果就是:array([3,6])

argsort函数:
返回升序排列后下标


python 中的字典:
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。

sorted函数:
sorted(iterable[,cmp,[,key[,reverse=True]]])
作用:Return a new sorted list from the items in iterable.
第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list)。
可选的参数有三个,cmp、key和reverse。
1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。
默认值为None。
2)key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
3)reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。
通常来说,key和reverse比一个等价的cmp函数处理速度要快。这是因为对于每个列表元素,cmp都会被调用多次,而key和reverse只被调用一次。



安装Matplotlib:

  • 安装

在使用NumPy进行学习统计计算时是枯燥的,大量的数据令我们很头疼,所以我们需要把它图形化显示。
Matplotlib是一个Python的图形框架,类似于MATLAB和R语言。
Matplotlib的官网地址是 http://matplotlib.org/ ,下载地址为 http://matplotlib.org/downloads.html,选择对应的版本即可安装,我选择的版本为matplotlib-1.3.1.win32-py2.7.exe

由于我之前已经安装过numpy,所以安装Matplotlib后只需要安装 python-dateutil-1.5.win32-py2.7.exepyparsing-1.5.7.win32-py2.7.exe

  • 测试

【1】输入一下测试命令
[mw_shl_code=applescript,true]import matplotlib.pyplot as plt
plt.plot([ 0, 1, 2])
plt.ylabel('Hello matplotlib' )
plt.show()[/mw_shl_code]

2016-04-09_155918.png

【2】显示如下:

2016-04-09_155942.png



下一篇:【机器学习实战】读书笔记 - (2)

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条