零基础入门机器学习-tensorflow(二)

上一篇《零基础入门机器学习-tensorflow(一)》非常简单的介绍了机器学习,今天就来谈谈在使用Python开发tensorflow机器学习应用前需要的必要知识储备(Python部分)。

Python的版本与安装

我有专门写文章介绍了Python及Tensorflow的安装方法,建议Python直接安装3.X版本,下面是文章链接:《从零开始搭建tensorflow人工智能开发环境(MAC版)

基础入门

如果有编程基础,学习Python的过程非常容易,可能几天的学习就能基本入门,即便没有编程基础,Python的学习也不会特别困难,你大概需要掌握这些基本知识:

1. Python的数据类型,了解整型、浮点、字符串、布尔值及变量的定义和使用

2. list、tuple、dict、set数据结构的使用,这是python中使用最广泛的数据结构,尤其在tensorflow中会经常用到,所以一定学会非常熟练的使用

3. 条件判断、循环等语法,做几个小练习就能掌握

4. 函数的定义和使用

5. 掌握切片、迭代等数据操作方法

以上是使用tensorflow所需用到Python的基础知识,建议多练习,熟练使用,推荐一套在线教程:

Python教程www.liaoxuefeng.com《零基础入门机器学习-tensorflow(二)》

Numpy库的使用

在机器学习过程中,我们操作的数据多为矩阵或多维数组,如果使用基本运算不仅算法过程复杂,而且效率极低,而numpy(Numerical Python)库提供了python对多维数组对象的支持,计算速度快了很多,操作上也非常简洁。

1. 数组定义

import numpy as np

# 一维数组
v = np.array([1, 2, 3, 4])

# 二维数组(矩阵)
m = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])

print(v)

print(" ----------- ")

print(m)

输出结果:

[1 2 3 4]
 ----------- 
[[1 2 3 4]
 [5 6 7 8]]

需要注意的是,在numpy中定义的数组,其中的元素必须为同一类型,在定义数组时可以通过dtype指定类型,如果没有指定,则系统会自动选择匹配的类型,例如 [1, 2, 3, 4] 数组,系统会定义为int型,而 [1, 2.0, 3, 4] 因为其中2.0是浮点数,所以系统会为数组指定数据类型为float。

2. 数组的结构

import numpy as np

# 一维数组
v = np.array([1, 2, 3, 4])

# 二维数组
m = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])

print(v.shape)

print(" ----------- ")

print(m.shape)

输出结果:

(4,)            # 一维数组,元素数量为4
 ----------- 
(2, 4)         # 二维数组,行数为2,列数为4

3. 数组数据的类型更改

import numpy as np

v = np.array(['1', '2', '3', '4'])

v_float = v.astype(np.float32)

print(v.dtype)
print(v)

print(" ------------ ")

print(v_float.dtype)
print(v_float)

输出结果:

<U1
['1' '2' '3' '4']
 ------------ 
float32
[1. 2. 3. 4.]

4. 数据文件的打开

以打开CSV文件为例,使用numpy.genfromtxt函数获取数据,获取的数据可以直接打印出来:

import numpy as np

data = np.genfromtxt('/Users/Bruce/Desktop/test.csv', dtype=str, delimiter=',', skip_header=1)

print(data)
print(type(data))

输出结果:

[['1000001052' '1' '1521243729' ... '25.6' '59.5' '17.05']
 ['1000000080' '0' '1521297805' ... '31.61' '59.03' '29.65']
 ['1000000435' '1' '1521297819' ... '31.13' '61.08' '29.42']
 ...
 ['1000001823' '1' '1521497233' ... '33.28' '49.27' '32.49']
 ['1000001826' '0' '1521497236' ... '32.97' '47.25' '32.39']
 ['1000001824' '1' '1521497293' ... '33.68' '49.15' '33.01']]
<class 'numpy.ndarray'>

5. 数据的选取

通过print(data)可以打印出文件所有的数据,如果希望打印出指定位置的数据,可以使用以下方式:

import numpy as np

data = np.genfromtxt('/Users/Bruce/Desktop/test.csv', dtype=str, delimiter=',', skip_header=1)

#打印出第2行第3列的数据
print(data[1, 2])

输出结果:

1521297805

6. 数据的切片

a)一维数组的切片

import numpy as np

v = np.array([5, 10, 15, 20, 25])

print(v[1:3])

一维数组的切片 v[1:3] ,其中的“1”代表从第2位开始取值,“3”代表下标3之前的一位(即示例中的数值15),输出结果:

[10 15]

b)二维数组的切片

import numpy as np

m = np.array([[5, 10, 15, 20, 25], [3, 6, 9, 12, 15], [1, 2, 3, 4, 5]])

# 打印第3列的所有行的数据
print(m[:,2])

print(" ----------- ")

# 打印第1、2列的所有行的数据
print(m[:,0:2])

print(m[:,2]),其中的冒号代表所有行,2代表第3列,输出结果:

[15 9 3]
 ----------- 
[[ 5 10]
 [ 3 6]
 [ 1 2]]

7. 数组的判断

import numpy as np

m = np.array([[5, 10, 15, 20, 25], [3, 6, 9, 12, 15], [1, 2, 3, 4, 5]])

# 数组中的值判断是否等于15
print(m == 15)

输出结果,返回bool值得数组结构:

[[False False True False False]
 [False False False False True]
 [False False False False False]]

“与”和“或”的操作:

import numpy as np

m = np.array([[5, 10, 15, 20, 25], [3, 6, 9, 12, 15], [1, 2, 3, 4, 5]])

# 数组中的值判断是否既等于15,又等于5
print((m == 15) & (m == 5))

print(" ------------ ")

# 数组中的值判断是否等于15或等于5
print((m == 15) | (m == 5))

输出结果:

[[False False False False False]
 [False False False False False]
 [False False False False False]]
 ------------ 
[[ True False True False False]
 [False False False False True]
 [False False False False True]]

8. 数组的计算

a) 数组求和

import numpy as np

m = np.array([[2, 4, 6, 8], [1, 5, 9, 14], [5, 10, 15, 20]])

print(m.sum(axis=0))

print(" ----------- ")

print(m.sum(axis=1))

其中axis=代表计算的维度,0代表在第一个维度内相加,也就是列相加;1代表在第二个维度内相加,也就是行相加,结果如下:

[ 8 19 30 42]
 ----------- 
[20 29 50]

b)数组的加减乘除

import numpy as np

m = np.array([5, 10, 15, 20, 25, 30, 35, 40])
n = np.arange(1, 9, 1)


print('m + n = ', m + n)
print('m - n = ', m - n)
print('m * n = ', m * n)
print('m / n = ', m / n)

输出结果:

m + n = [ 6 12 18 24 30 36 42 48]
m - n = [ 4 8 12 16 20 24 28 32]
m * n = [ 5 20 45 80 125 180 245 320]
m / n = [5. 5. 5. 5. 5. 5. 5. 5.]

c)数组的矩阵乘法

import numpy as np

m = np.array([[1, 1], [0, 1]])
n = np.array([[2, 1], [4, 2]])

print('m dot n = ', np.dot(m, n))

输出结果:

m dot n = [[6 3]
 [4 2]]

9. 数组的生成

a) arange

import numpy as np

m = np.arange(15)

print(m)

print(" ----------- ")

# 改变数组形状为5行3列
print(m.reshape((5, 3)))

输出结果:

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
 ----------- 
[[ 0 1 2]
 [ 3 4 5]
 [ 6 7 8]
 [ 9 10 11]
 [12 13 14]]

定义输出范围,下例中从5开始生成数值,步长为3,最后一位数值不超过18。

import numpy as np

m = np.arange(5, 18, 3)

print(m)

输出结果:

[ 5 8 11 14 17]

b)zeros、ones

import numpy as np

m_zeros = np.zeros((4, 3))
m_ones = np.ones((4, 3))

print(m_zeros)

print(" ------------ ")

print(m_ones)

输出结果:

[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
 ------------ 
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

c)random

import numpy as np

m = np.random.random((3, 4))

print(m)

numpy.random.random会产生[0, 1)区间的随机数,输出结果如下:

[[0.79380161 0.28176742 0.82962069 0.60747785]
 [0.14056924 0.64440438 0.64972462 0.8162096 ]
 [0.41452382 0.82120787 0.22358394 0.30673285]]

d)linspace

import numpy as np

m = np.linspace(2.4, 130.3, 30)

print(m)

linspace可以在指定区间内,生成指定数量的数组,如上例中,生成从2.4到130.3区间中,平均分布的30个数值,输出结果如下:

[ 2.4 6.81034483 11.22068966 15.63103448 20.04137931
 24.45172414 28.86206897 33.27241379 37.68275862 42.09310345
 46.50344828 50.9137931 55.32413793 59.73448276 64.14482759
 68.55517241 72.96551724 77.37586207 81.7862069 86.19655172
 90.60689655 95.01724138 99.42758621 103.83793103 108.24827586
 112.65862069 117.06896552 121.47931034 125.88965517 130.3 ]

数字极客-学知识,做最酷的事!www.digeek.tech《零基础入门机器学习-tensorflow(二)》

    原文作者:Bruce
    原文地址: https://zhuanlan.zhihu.com/p/35222654
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞