学习大纲
- 线性回归
- 决策树、集成算法
- 聚类算法
- KNN
- SVM
- EM
- 隐马尔可夫
- LDA
- 特征工程
1、常见函数
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import math
x=np.arange(0.05,3,0.05)
x
mpl.rcParams["font.family"] = "SimHei" # 不设置这个就只会把中文显示成方块
mpl.rcParams["axes.unicode_minus"]=False # 让负号显示
# 常函数
y1=[5 for i in x]
plt.plot(x,y1,linewidth=2,label='常函数:y=5')
# 一次函数
y2=[2*i + 1 for i in x]
plt.plot(x,y2,linewidth=2,label='一次函数:y=2x+1')
# 二次函数
y3=[1.5*(i**2)-3*i+1 for i in x]
plt.plot(x,y3,linewidth=2,label='一次函数:y=1.5$x^2$-3x+1')
# 幂函数
y4=[math.pow(i,2) for i in x]
plt.plot(x,y4,linewidth=2,label='幂函数:y=$x^2$')
# 指数函数
y5=[math.pow(2,i) for i in x]
plt.plot(x,y5,linewidth=2,label='指数函数:y=$2^x$')
# 对数函数
y6=[math.log2(i) for i in x]
plt.plot(x,y6,linewidth=2,label='对数函数:y=$log2(x)$')
plt.legend(loc='lower right')
plt.grid(True)
plt.show()
2、梯度
梯度是一个向量,表示某一函数在该点处的方向导数沿着该方向取的最大值,即函数在该点处沿着该方向变化最快,变化率最大(即该梯度向量的模);当函数为一维函数的时候,梯度其实就是导数。
3、泰勒公式
Taylor(泰勒)公式是用一个函数在某点的信息描述其附近取值的公式。如果函数足够平滑,在已知函数在某一点的各阶导数值的情况下,Taylor公式可以利用这些导数值来做系数构建一个多项式近似函数在这一点的邻域中的值。
4、条件概率
将条件概率公式由两个事件推广到任意有穷多个事件时,可以得到如下公式,假设A1,A2,…,An为n个任意事件(n≥2),而且P(A1A2…An)>0,则:
5、全概率公式
6、贝叶斯
7、期望
8、方差
方差(variance)是衡量随机变量或一组数据时离散程度的度量,是用来度量随机变量和其数学期望之间的偏离程度。即方差是衡量数据原数据和期望/均值相差的度量值。
9、标准差
10、协方差
11、大数定律
import random
# 随机种子
random.seed(28)
def generate_random_int(n):
'''产生1-9的n个随机数'''
return [random.randint(1,9) for i in range(n)]
if __name__ == '__main__':
number = 8000
x=[i for i in range(number+1) if i != 0] #[1,2,3,....,80000]
total_random_int = generate_random_int(number)
# 分别求0-n个1-9的随机数的均值【0-1均值,0-2均值,。。。。,0-8000均值】
y = [np.mean(total_random_int[0:i+1]) for i in range(number)]
plt.plot(x,y,'b-')
plt.xlim(0,number)
plt.grid(True)
plt.show()
12、中心极限定理
随机的抛六面的骰子,计算三次的点数的和, 三次点数的和其实就是一个事件A,现在问事件A发生的概率以及事件A所属的分布是什么?
思路:
- 每次抛骰子都是独立同分布的;
- 三次相加就是Y,服从高斯分布;
def generate_random_int():
'''产生1-6的1个随机数'''
return [random.randint(1,6)]
def generate_sum(n):
'''计算抛n次的和'''
return np.sum([generate_random_int() for i in range(n)])
if __name__ == '__main__':
# 进行A事件的个数
number1 =1000000
# 每次A事件抛三次骰子
number2=3
# 计算number1次抛三个骰子的A事件的和
# 1*1000000:[5, 11, 10, 16, 8, 11, 7, 10, 6, 10,....]
keys=[generate_sum(number2) for i in range(number1)]
# 统计每个和出现的次数{5: 1, 11: 2, 10: 3, 16: 1, 8: 1, 7: 1, 6: 1}
result={}
for key in keys:
count = 1
if key in result:
count+=result[key]
result[key] = count
# 获取x和y
x=sorted(np.unique(list(result.keys()))) #np.unique([5, 11, 10, 16, 8, 7, 6])
y=[]
for key in x:
y.append(result[key]/number1)
plt.plot(x,y,'b-')
plt.xlim(x[0]-1,x[-1]+1)
plt.grid(True)
plt.show()
13、最大似然估计