机器学习|吴恩达机器学习笔记---Octave教程(Python实现)

前言

本节主要将吴恩达机器学习中的Octave教程操作用Python实现,主要内容包括: 1.基本操作(Basic Operations) 2.移动数据(Moving Data Around) 3.计算数据(Computing on Data) 4.绘图数据(Plotting Data) 5.控制语句:for,while,if语句

基本操作(Basic Operations) (一)算术运算和逻辑运算
# 算术运算 print("5 + 6 = %d" % (5+6)) print("3 - 2 = %d" % (3-2)) print("5 * 8 = %d" % (5*8)) print("1/2 = %f" % (1/2)) print("2^6 = %d" % (pow(2, 6)))# 逻辑运算 print("1 & 0 = %d" % int(1&0)) print("1 | 0 = %d" % int(1|0))

运行结果
5 + 6 = 11 3 - 2 = 1 5 * 8 = 40 1/2 = 0.500000 2^6 = 64 1 & 0 = 0 1 | 0 = 1

(二)变量赋值
import math import numpy as np# 变量赋值 a = 3 print("a = %d" % a) b = 'hi' print("b = %s" % b) c = (3 >= 1) print("c = %d" % int(c))a = math.pi print("pi = %f" % a) print("保留六位小数的pi= %.6f" % a)# 建立矩阵 A = np.mat([[1, 2], [3, 4], [5, 6]]) print("A = ", A) V = np.mat([[1], [2], [3]]) print("V = ",V)# 建立特殊矩阵 A = np.ones((2, 3)) print("A = ", A) B = np.zeros((2, 3)) print("B = ", B) I = np.eye(6) print("I = ", I)C = np.random.rand(3, 3) print("C = ", C) D = np.random.randn(1, 3) print("D = ", D)

运行结果
a = 3 b = hi c = 1 pi = 3.141593 保留六位小数的pi= 3.141593 A =[[1 2] [3 4] [5 6]] V =[[1] [2] [3]] A =[[1. 1. 1.] [1. 1. 1.]] B =[[0. 0. 0.] [0. 0. 0.]] I =[[1. 0. 0. 0. 0. 0.] [0. 1. 0. 0. 0. 0.] [0. 0. 1. 0. 0. 0.] [0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 1. 0.] [0. 0. 0. 0. 0. 1.]] C =[[0.32699556 0.12524207 0.58057881] [0.64533286 0.84355689 0.77487524] [0.48110471 0.38639891 0.80057691]] D =[[-0.913383250.72946901 -1.07624459]]

移动数据(Moving Data Around)
import numpy as np import pandas as pd# 矩阵大小 A = np.mat([[1, 2], [3, 4], [5, 6]]) print("矩阵A的大小为: ", A.shape) print("矩阵A的行数的大小为: ", A.shape[0]) print("矩阵A的列数的大小为: ", A.shape[1])V = np.mat([1, 2, 3, 4]) print("矩阵V的最大维度为: ", max(V.shape))# 加载数据 path = r'C:\Users\Administrator\Desktop\ML\machine-learning-ex1\ex1\ex1data1.txt'# 文件路径,内容为两列 data = https://www.it610.com/article/pd.read_csv(path, header = None, names = ['data1', 'data2']) print("加载的数据的大小为: ", data.shape)# 从加载的数据中裁剪一部分存储到V中 V = data.iloc[:10, :] print(V)# 操作数据 A = np.mat([[1, 2], [3, 4], [5, 6]]) print(A[2, 1])# 索引为(2,1)的值 print(A[1, :])# 第二行所有元素 print(A[:, 1])# 第二列所有元素A[:, 1] = [[1], [2], [3]]# 把第二列替换掉 B = [[10], [11], [12]] C = [[10, 11]] print(np.c_[A, B])# 为矩阵加上列 print(np.r_[A, C])# 为矩阵加上行

运行结果
矩阵A的大小为:(3, 2) 矩阵A的行数的大小为:3 矩阵A的列数的大小为:2 矩阵V的最大维度为:4 加载的数据的大小为:(97, 2) data1data2 06.110117.5920 15.52779.1302 28.518613.6620 37.003211.8540 45.85986.8233 58.382911.8860 67.47644.3483 78.578112.0000 86.48626.5987 95.05463.8166 6 [[3 4]] [[2] [4] [6]] [[ 11 10] [ 32 11] [ 53 12]] [[ 11] [ 32] [ 53] [10 11]]

计算数据(Computing on Data)
import numpy as np import mathA = np.mat([[1, 2], [3, 4], [5, 6]]) B = np.ones((3, 2)) C = np.mat([[1, 1], [2, 2]])print("A*C = ", np.dot(A, C))# 直接A*B也可以 print("A.*B = ", np.multiply(A, B)) print(A+1)# 转置和逆 print("矩阵A的转置为: ", A.T) print("矩阵A的逆为: ", A.I)print("矩阵A的最大值: ", np.max(A)) print("矩阵A各元素之和为: ", np.sum(A))

运行结果
A*C =[[ 55] [11 11] [17 17]] A.*B =[[1. 2.] [3. 4.] [5. 6.]] [[2 3] [4 5] [6 7]] 矩阵A的转置为:[[1 3 5] [2 4 6]] 矩阵A的逆为:[[-1.33333333 -0.333333330.66666667] [ 1.083333330.33333333 -0.41666667]] 矩阵A的最大值:6 矩阵A各元素之和为:21

绘图数据(Plotting Data)
import numpy as np import math import matplotlib.pyplot as pltt = np.arange(0, 0.98, 0.01)y1 = np.sin(2*math.pi*4*t) y2 = np.cos(2*math.pi*4*t)plt.plot(t, y1) plt.plot(t, y2)plt.xlabel('time')# 横坐标 plt.ylabel('value')# 纵坐标 plt.legend(['sin', 'cos'])# 标注名称 plt.title('myplot')# 标题plt.show()

运行结果
机器学习|吴恩达机器学习笔记---Octave教程(Python实现)
文章图片

import numpy as np import math import matplotlib.pyplot as pltt = np.arange(0, 0.98, 0.01)y1 = np.sin(2*math.pi*4*t) y2 = np.cos(2*math.pi*4*t)plt.subplot(1, 2, 1) plt.plot(t, y1, 'r') plt.title('sin')plt.subplot(1, 2, 2) plt.plot(t, y2, 'b') plt.title('cos')plt.show()

运行结果
机器学习|吴恩达机器学习笔记---Octave教程(Python实现)
文章图片

控制语句:for,while,if语句
  • for,while,if语句以最简单的例子展示用法
# if语句判断成绩 score = 79 if 90 < score <= 100: grade = '优秀' elif 80 < score <= 90: grade = '良好' elif 60 < score <= 80: grade = '一般' else: grade = '不及格'print(grade)# for语句求1到100的和 sum = 0 for i in range(101): sum += i print(sum)# while语句求1到100的和 sum = 0 i = 1 while(i<101): sum += i i += 1 print(sum)

运行结果
一般 5050 5050

最后补充一下Python的函数定义,以代价函数为例:
import numpy as npdef CostFunction(X, y, theta): m = X.shape[0] predictions = X*theta cost = predictions - y sqrErrors = [[cost[i][j] ** 2 for j in range(len(cost[i]))] for i in range(len(cost))]J = 1/(2*m)*np.sum(sqrErrors) return J# 给出例子 X = np.mat([[1, 1], [1, 2], [1, 3]]) y = np.mat([[1], [2], [3]]) theta = np.mat([[0], [0]])print("代价函数的结果的为 ", CostFunction(X, y, theta))

【机器学习|吴恩达机器学习笔记---Octave教程(Python实现)】运行结果
代价函数的结果的为2.333333333333333

    推荐阅读