机器学习第一课

机器学习预备:工具选择、练习机器学习中常用的库

工具选择

  • 什么是anaconda?

1.anaconda 是一个python的发行版,包括了python和很多常见的软件库, 和一个包管理器conda。

1、anaconda里面集成了很多关于python科学计算的第三方库,主要是安装方便,而python是一个编译器,如果不使用anaconda,那么安装起来会比较痛苦,各个库之间的依赖性就很难连接的很好。

2、常见的科学计算类的库都包含在里面了,使得安装比常规python安装要容易。

  • 什么是 jupyter notebook?

Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。

简而言之,Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。

  • 为什么建议使用 jupyter notebook?

    • 交互方面:交互性强,像个web应用,可以一边写代码一边运行查看,是否有bug
    • 便于传播:web服务,可以部署在云端
  • 如何安装anaconda?

  • 如何安装 jupyter notebook?

    ​ 一般来说,安装了annaconda,自动就安装了jupyter notebbok,如果没有,可以用下面这条指令

    conda install jupyter notebook
    
  • 如何启动jupyter notebook

    • 打开命令行
    • 输入 jupyter notebook
  • conda 安装其他库的命令

  • conda install package_name
    

Numpy 库

numpy库的使用

导入库

# 导入库
import numpy as np

生成数组

利用 array()函数

# 生成  2 X 4   数组
A = np.array([[1,2,3,8],[2,4,6,8]])
A
array([[1, 2, 3, 8],
       [2, 4, 6, 8]])
# 借用已生成的数组 A 生成多维维数组  B
B = np.array([A , A*2 ,A*7])
print("数组B: \n",B)

C = np.array([A , A*4])
print("数组C: \n",C)
数组B: 
 [[[ 1  2  3  8]
  [ 2  4  6  8]]

 [[ 2  4  6 16]
  [ 4  8 12 16]]

 [[ 7 14 21 56]
  [14 28 42 56]]]
数组C: 
 [[[ 1  2  3  8]
  [ 2  4  6  8]]

 [[ 4  8 12 32]
  [ 8 16 24 32]]]

利用linspace()函数

Numpy中的 linspace() 函数可以在指定的两个数之间生成固定数量的等间距数组

# 生成一个从 1 到 20 的 20 个等间距步长数组
X = np.linspace( start = 1, stop = 20, num = 20 )
X
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,
       14., 15., 16., 17., 18., 19., 20.])
利用 arange() 函数
  • 可以生成从 0 开始递增的数组(默认步长为 1)
  • 可以指定步长
#生成一个从 0 到 30 的数组
Ar1 = np.arange( 30 ) 
Ar1
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
# 生成一个从 1 开始, 小于 30 ,且步长为7 的数组
Ar2 = np.arange(1, 30, 7)
Ar2
array([ 1,  8, 15, 22, 29])
利用 ones() 函数

可以生成元素值全为 1 的数组

O = np.ones((3 , 3))
O
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
利用 zeros() 函数

可以生成元素值全为 0 的数组

Z = np.zeros((3 , 3))Z
array([[0., 0., 0.],       [0., 0., 0.],       [0., 0., 0.]])
利用 eye() 函数

可以生成单位矩阵

E = np.eye(3)E
array([[1., 0., 0.],       [0., 1., 0.],       [0., 0., 1.]])
利用diag()函数

可以指定矩阵对角线上元素的值

# 矩阵对角线的元素从 0 开始递增到 8 (步长为 1 )print(np.diag(np.arange(9)))
[[0 0 0 0 0 0 0 0 0] [0 1 0 0 0 0 0 0 0] [0 0 2 0 0 0 0 0 0] [0 0 0 3 0 0 0 0 0] [0 0 0 0 4 0 0 0 0] [0 0 0 0 0 5 0 0 0] [0 0 0 0 0 0 6 0 0] [0 0 0 0 0 0 0 7 0] [0 0 0 0 0 0 0 0 8]]
# 矩阵对角线的元素从 0 开始递增到 15 (步长为 5 )Di = np.diag(np.arange(0, 16, 5))Di
array([[ 0,  0,  0,  0],       [ 0,  5,  0,  0],       [ 0,  0, 10,  0],       [ 0,  0,  0, 15]])
利用 Random 模块

Random 模块是用来生成随机数的有利工具

利用 randn() 函数
np.random.rand(3 , 3)
array([[0.61065561, 0.84522322, 0.38555949],       [0.35224165, 0.97033012, 0.05338057],       [0.56877906, 0.00917284, 0.93444517]])
利用 seed() 函数
生成的随机数可以重复
np.random.seed(3)np.random.randn(5 , 6)
array([[ 1.78862847,  0.43650985,  0.09649747, -1.8634927 , -0.2773882 ,        -0.35475898],       [-0.08274148, -0.62700068, -0.04381817, -0.47721803, -1.31386475,         0.88462238],       [ 0.88131804,  1.70957306,  0.05003364, -0.40467741, -0.54535995,        -1.54647732],       [ 0.98236743, -1.10106763, -1.18504653, -0.2056499 ,  1.48614836,         0.23671627],       [-1.02378514, -0.7129932 ,  0.62524497, -0.16051336, -0.76883635,        -0.23003072]])

对数组的操作

改变数组维度

 利用 reshape() 函数
# 通过 reshape 方法改变数组维度A.reshape((4 , -1))
array([[1, 2],       [3, 8],       [2, 4],       [6, 8]])

(4 , -1) 表示:
4 -----> 表示将数组转换成4行
-1 -----> 表示数组新列数由 python 自动计算出

A.reshape((8 , -1))
array([[1],       [2],       [3],       [8],       [2],       [4],       [6],       [8]])
A.reshape((-1 , 4))
array([[1, 2, 3, 8],       [2, 4, 6, 8]])

(-1 , 4)表示:
-1 -------> 表示数组新行数由 python 自动计算出
4 -------> 表示将数组的列数转换成4列

切片方法

# 通过切片方式提取数组中某些元素# 提取第二行元素A[1 , :]
array([2, 4, 6, 8])
#提取第四列元素A[: , 3]
array([8, 8])
#提取第一行、第二行 和 第二列、第三列 相交的元素A[0:2 ,1:3 ]
array([[2, 3],       [4, 6]])
# 通过切片的方法改变数组中相应位置的数值#改变列的数值A[: , 2] = 7A
array([[1, 2, 7, 8],       [2, 4, 7, 8]])
A[0 , :] = 77A
array([[77, 77, 77, 77],       [ 2,  4,  7,  8]])

变量的合并

利用 np._c 函数
x = [0.69, -1.31, 0.39, 0.09, 1.29, 0.49, 0.19, -0.81, -0.31, -0.71]y = [0.49, -1.21, 0.99, 0.29, 1.09, 0.79, 0.31, -0.81, -0.31, -1.01]X = np.c_[y,x]X
array([[ 0.49,  0.69],       [-1.21, -1.31],       [ 0.99,  0.39],       [ 0.29,  0.09],       [ 1.09,  1.29],       [ 0.79,  0.49],       [ 0.31,  0.19],       [-0.81, -0.81],       [-0.31, -0.31],       [-1.01, -0.71]])

数组排序

利用 np.sort() 函数
# np.sort()函数默认对每行数据进行排序S = np.sort([[7,2,9],[6,5,3],[11,3,6]])S
array([[ 2,  7,  9],       [ 3,  5,  6],       [ 3,  6, 11]])

矩阵操作

数组转换成矩阵

利用 mat() 函数
M = np.mat( np.random.randn(3 , 3) )M
matrix([[ 0.74505627,  1.97611078, -1.24412333],        [-0.62641691, -0.80376609, -2.41908317],        [-0.92379202, -1.02387576,  1.12397796]])

计算矩阵的逆

使用 I 方法
I = M.II
matrix([[-0.98989549, -0.27740664, -1.69275723],        [ 0.86061923, -0.09133419,  0.75603926],        [-0.02961836, -0.31119908,  0.18713413]])

一个矩阵乘以它的逆阵会得到单位矩阵

M * I
matrix([[ 1.00000000e+00, -5.02778637e-17,  2.48255854e-16],        [-4.53778129e-17,  1.00000000e+00, -5.87821036e-17],        [-5.06867386e-17, -5.12893837e-18,  1.00000000e+00]])

矩阵转置

利用 T 方法
m = np.mat(np.arange(12).reshape(4,-1))print(m)m.T
[[ 0  1  2] [ 3  4  5] [ 6  7  8] [ 9 10 11]]





matrix([[ 0,  3,  6,  9],        [ 1,  4,  7, 10],        [ 2,  5,  8, 11]])

计算矩阵的行列式

利用 np.linalg.det() 函数
D = np.linalg.det( M )D
3.4147604776192337

计算矩阵的迹

矩阵的迹是指对角线上所有元素相加的和利用 np.trace() 函数
np.trace( M )
1.0652681307862628

常用的统计函数

计算均值

利用 mean() 函数
E = np.arange(1,100)E.mean()
50.0

计算标准差

利用 std() 函数
E.std()
28.577380332470412

计算数组的百分位数和中位数

利用 np.percentile() 和 np.median() 函数
# 计算百分位数np.percentile( E , 50)
50.0
# 计算中位数np.median(E)
50.0

Matplotlib 库

绘图准备

import numpy as np
import matplotlib.pylab as plt
%matplotlib notebook
# 输出的图片显示中文
from matplotlib.font_manager import FontProperties
fonts = FontProperties(fname = "C:/Windows/Fonts/simsun.ttc",size = 14)

绘制单个窗口图像

# 简单示例
X = np.linspace(1 , 15)                  # 生成等长间距的数组
Y = np.sin(X)
plt.figure(figsize=(6 , 2.5))            # 定义了一个图像窗口,图像的大小(宽:6 , 高:2.5)
plt.plot(X , Y ,"g-o")                   # 绘制 X ,Y ,红色、直线、圆圈
plt.xlabel("X")
plt.ylabel("Y")                          # X 、Y 轴的label
plt.title("y = sin(x)")                  # 图像的名称
plt.grid("on")                           # 添加网格
plt.show()                               # 显示图像
<IPython.core.display.Javascript object>

绘制多个窗口

xtick = [0, 5, 10, 15]
xtickcklabel = [str(x) + "在这" for x in xtick]
plt.figure(figsize = (10, 8))       # 定义一个窗口,窗口大小为 宽 10, 高 8
plt.subplot(2, 2, 1)                # 4 个子图中的第 1 个子图
plt.plot(X, Y, "b-.s")              # 绘制 X, Y,蓝色、虚线、矩形点
plt.xlabel(r"$\alpha$")             # X 坐标轴的label,使用 LaTex 公式
plt.ylabel(r"$\beta$")              # Y  label
plt.title("$y=\sum sin(x)$")        # 图像的名字 title,使用 LaTex 公式

plt.subplot(2, 2, 2)                # 绘制第 2 个子图
plt.hist(Y, 20)                     # 直方图
plt.text(0, 7, "直方图" ,fontproperties = fonts) # 在 (0, 7) 上添加文字 
plt.xlabel("频数",fontproperties = fonts)                        #  X label, 使用中文
plt.ylabel("取值",fontproperties = fonts)                        #  Y label   
plt.title("直方图",fontproperties = fonts)

plt.subplot(2, 1, 2)               #  4 个子图中的第 1,2 个子图合为一个图,绘制最后一个图
plt.step(X, Y, c = "g", label = "sin(x)", linewidth = 3)         # 阶梯图, 红色,线宽—— 3
plt.xlabel("X",fontproperties = fonts)
plt.ylabel("Y",fontproperties = fonts)
plt.title("Bar",fontproperties = fonts)
plt.legend(loc = "lower right", fontsize = 16)                    # 图例在右下角,字体大小为 16
plt.xticks(xtick, xtickcklabel, rotation = 45, fontproperties = fonts ) # x轴的坐标轴取值,倾斜 45 度
plt.subplots_adjust(hspace = 0.35)  # 调整图像之间的水平空间距离
plt.show()
<IPython.core.display.Javascript object>



         #  Y label   

plt.title(“直方图”,fontproperties = fonts)

plt.subplot(2, 1, 2) # 4 个子图中的第 1,2 个子图合为一个图,绘制最后一个图
plt.step(X, Y, c = “g”, label = “sin(x)”, linewidth = 3) # 阶梯图, 红色,线宽—— 3
plt.xlabel(“X”,fontproperties = fonts)
plt.ylabel(“Y”,fontproperties = fonts)
plt.title(“Bar”,fontproperties = fonts)
plt.legend(loc = “lower right”, fontsize = 16) # 图例在右下角,字体大小为 16
plt.xticks(xtick, xtickcklabel, rotation = 45, fontproperties = fonts ) # x轴的坐标轴取值,倾斜 45 度
plt.subplots_adjust(hspace = 0.35) # 调整图像之间的水平空间距离
plt.show()



    <IPython.core.display.Javascript object>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值