机器学习(二) 线性代数-向量
对于机器学习来说,数学很重要,即使你已经把大学阶段的数学知识都忘完了,还是要从记忆里拾取一些。
向量
数学概念里,向量是指具有大小和方向的量。具体的说向量可以相加生成新的向量,可以乘以标量(数字),也可以生成新的向量的对象。
比如说,一个班级里所有学生的身高、体重、年龄数据,可以把数据记为三维向量(height,weight,age),这个班级有4门考试,可以把学生成绩记为四维向量(exam1,exam2,exam3,exam4)。
把数据用向量表示为数字的列表,例如:
height_weight_age = [172,139,18]
grades = [88,92,94,81]
这样很直观,但是在python里列表不能直接对向量运算,这里就需要转换一下方式。
首先说说两个向量做加法,向量以分量形式做运算。意思是如果两个向量v和w长度相同,那它们的和就是一个新的向量,其中向量的第一个元素等于v[0] + w[0],第二个元素等于v[1] + w[1]。如果2个向量的长度不同,则不能相加。
例如:向量[1,2]加上向量[2,1]等于[1+2 , 2+1]即是[3,3]
def vector_add(v,w): #向量相加
return [v_i + w_i for v_i,w_i in zip(v,w)]
def vector_subtract(v,w): #向量相减
return [v_i - w_i for v_i,w_i in zip(v,w)]
v = [1,2]
w = [2,1]
vector_add(v,w)
vector_subtract(v,w)
直接这样用代码敲出来太抽象了,那么如何结合前面讲过的数据可视化进行展示呢?我写了向量加法的数据化展示,你可以自己写一下更多向量运算。
import numpy as np
import matplotlib.pyplot as plt
import pylab
pylab.rcParams['figure.figsize'] = (20.0, 10.0) # 显示大小
def draw_vector_add(A, B):
fig = plt.figure()
ax = fig.add_subplot(121)
# fc: filling color
# ec: edge color
ax.arrow(0, 0, A[0], A[1],
length_includes_head=True,# 增加的长度包含箭头部分
head_width=0.25, head_length=0.25, fc='c', ec='y')
ax.arrow(A[0], A[1], B[0], B[1],
length_includes_head=True,# 增加的长度包含箭头部分
head_width=0.25, head_length=0.25, fc='c', ec='y')
ax.arrow(0