博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ubuntu机器学习python实战(一)k-近邻算法
阅读量:7059 次
发布时间:2019-06-28

本文共 4203 字,大约阅读时间需要 14 分钟。

2018.4.18Python机器学习记录

一.Ubuntu14.04安装numpy

1.

2.安装代码:

在安装之前建议更新一下软件源 :

sudo apt-get update

如果python 2.7 没有问题 ,就可以进行下一步了

现在安装用于数值计算和绘图的包以及Sklearn 分别是numpy scipy matplotlib pandas 和 sklearn
apt-get命令如下

sudo apt-get install python-numpysudo apt-get install python-scipysudo apt-get install python-matplotlibsudo apt-get install python-pandassudo apt-get install python-sklearn

3.测试

测试下是否全部安装成功,打开python解释器,输入以下命令,若无报错,则就成功。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn import datasets,linear_model

4.Ubuntu编写与运行python程序

(1)vim创建hello.py中编写代码:print 'Hello,Welcome to linux python'

(2)进入程序所在目录:cd python
(3)运行程序 python hello.py

二.NumPy函数库基础

Python shell 开发环境下输入以下命令:

>>>from numpy import *  #将numpy函数库中的所有模块引入当前的命名空间>>> random.rand(4,4)   #构造一个4*4的随机数组array([[ 0.97134166,  0.69816709,  0.35251331,  0.32252662],       [ 0.40798608,  0.48113781,  0.67629943,  0.12288183],       [ 0.96055063,  0.85824686,  0.95458472,  0.40213735],       [ 0.28604852,  0.43380204,  0.2558164 ,  0.07954809]])>>> randMat=mat(random.rand(4,4)) #调用mat函数将数组转换为矩阵>>> randMat.I #.I实现矩阵求逆运算matrix([[ 1.12580852, -0.43470821,  2.71229992, -2.16829781],        [-1.4600302 ,  1.65644197, -1.3742097 ,  1.6297217 ],        [ 3.379582  ,  0.40573689,  0.84634018, -2.72232677],        [-3.35086377, -2.64978047, -1.39459215,  4.68277082]])>>> invaRandMat=randMat.I #存储逆矩阵>>> randMat*invaRandMat #矩阵乘法 生成单位矩阵matrix([[  1.00000000e+00,   0.00000000e+00,   0.00000000e+00,           2.22044605e-16],        [ -2.22044605e-16,   1.00000000e+00,   1.24900090e-16,           2.49800181e-16],        [ -2.22044605e-16,  -1.11022302e-16,   1.00000000e+00,           2.22044605e-16],        [ -4.44089210e-16,  -2.22044605e-16,  -2.22044605e-16,           1.00000000e+00]])>>> myEye=randMat*invaRandMat  #>>> myEye-eye(4)  #求误差值,eye(4)生成4*4单位矩阵matrix([[ -4.44089210e-16,   0.00000000e+00,   0.00000000e+00,           2.22044605e-16],        [ -2.22044605e-16,  -1.11022302e-16,   1.24900090e-16,           2.49800181e-16],        [ -2.22044605e-16,  -1.11022302e-16,   0.00000000e+00,           2.22044605e-16],        [ -4.44089210e-16,  -2.22044605e-16,  -2.22044605e-16,           4.44089210e-16]])

三.k-近邻算法实战

1.准备:使用Python导入数据

vim创建kNN.py:

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

2.进入Python开发环境测试

>>> import kNNTraceback (most recent call last):  File "
", line 1, in
ImportError: No module named kNN解决:需进入到kNN.py存储路径,然后在终端输入Python(1)cy@pc:~$ cd python #我的保存路径cy@pc:~/python$ python>>> import kNN >>> group,labels=kNN.createDataSet()>>> grouparray([[ 1. , 1.1], [ 1. , 1. ], [ 0. , 0. ], [ 0. , 0.1]])>>> labels['A', 'A', 'B', 'B']

3.实施kNN分类算法

在上面基础上加入函数classsify0()

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    #inx分类的输入向量 dataSet输入的训练样本集,labels标签向量,k最近邻数目def classify0(inx,dataSet,labels,k):     #numpy函数shape[0]返回dataSet的行数    dataSetSize =dataSet.shape[0]    #在列向量方向上重复inX共1次(横向),行向量方向上重复inX共dataSetSize次(纵向)    diffMat=tile(inx,(dataSetSize,1))-dataSet  #错写成了dataset    sqDiffMat=diffMat**2    sqDistances =sqDiffMat.sum(axis=1)    distances=sqDistances**0.5****    sortedDistIndicies=distances.argsort()    classCount={}    for i in range(k):        voteIlabel=labels[sortedDistIndicies[i]]        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1    sortedClassCount=sorted(classCount.iteritems(),    key=operator.itemgetter(1),reverse=True)   #错写成了true    return sortedClassCount[0][0]

numpy.tile()比如 a = np.array([0,1,2]), np.tile(a,(2,1))就是把a先沿x轴(就这样称呼吧)复制1倍,即没有复制,仍然是 [0,1,2]。再把结果沿y方向复制2倍,即最终得到 array([[0,1,2],       [0,1,2]])

同理:

>>> b = np.array([[1, 2], [3, 4]])>>> np.tile(b, 2) #沿X轴复制2倍array([[1, 2, 1, 2],       [3, 4, 3, 4]])>>> np.tile(b, (2, 1))#沿X轴复制1倍(相当于没有复制),再沿Y轴复制2倍array([[1, 2],       [3, 4],       [1, 2],       [3, 4]])

测试:

>>> import kNN>>> group,labels=kNN.createDataSet()>>> kNN.classify0([0,0],group,labels,3)
'B'

转载于:https://www.cnblogs.com/cybest/p/8902274.html

你可能感兴趣的文章
【转】解决深入学习PHP的瓶颈?
查看>>
xpath节点匹配简易教程
查看>>
undefined reference问题总结
查看>>
binary 和 varbinary
查看>>
php构造方法与析构方法
查看>>
条件熵
查看>>
如何摆脱工具类
查看>>
Widnows批处理异地备份数据
查看>>
四边形优化DP学习
查看>>
红黑树
查看>>
远程推送脚本,创建任务计划
查看>>
设计模式 工厂和抽象工厂
查看>>
Maven学习第1期---Maven简单介绍
查看>>
#include <bits/stdc++.h>头文件
查看>>
iOS swift 语句只能写在函数体内
查看>>
C# 接收form表单中多个相同name值的问题
查看>>
Eclipse下配置使用Hadoop插件
查看>>
5/3上午
查看>>
回顾“.NET技术”.NET Remoting分布式开发
查看>>
移动开发多平台代码共享“.NET研究”
查看>>