数据结构--05字符串
第五节、字符串
一、数据结构
1.顺序存储
123456#define MaxSize 100typedef struct { char ch[MaxSize]; int len;}SqString;
2.链式存储
1234typedef struct node { char data; struct node * next;}LinkString;
二、顺序串基本操作
串的赋值
12345678910void Assign(SqString &s,chat t[]){ int i = 0; while(t[i]!= '/0') { s.ch[i] = t[i]; i++; } s.len = i;}
串的复制
12345678910void StrCopy(SqString &s,SqString t){ int ; for(i=0;i<t.len; ...
统计学习--01机器学习简介
统计学习–01机器学习简介
一、分类
1.机器学习根据任务类型,可划分为:
监督学习:从已经标注的数据中来训练模型。主要分为:回归,分类、序列标注。
无监督学习:从未标记的数据中训练模型。主要分为聚类任务、降维任务。
半监督学习:用大量未标记的数据和少量标记的数据来训练模型。
强化学习:从系统和环境之间大量交互知识中训练模型。
2.机器学习根据算法类型,可以分为:
传统机器学习:基于数学模型的机器学习方法,包括逻辑回归、决策树、SVM等
深度学习:基于神经网络的机器学习方法,包括前馈神经网络、卷积神经网络、递归神经网络等。
二、基本概念
2.1.特征空间
特征向量表示每个具体的输入,所有的特征向量构成特征空间。
2.2.样本表示
x 表示输入实例,y表示真实的样本标签(标注的样本标签),y^\hat yy^是预测的一个值。
三、监督学习
3.1.监督学习
1.监督学习的数据是被人工打标签的。
2.监督学习假设输入x与标记y遵循联合概率分布P(x,y),训练数据和测试数据依联合概率分布p(x,y)独立同分布产生。
3.监督学习的目的在于学习一个由输入到输出到映射 ...
FM
FM模型(Factorization Machines)
1.线性回归
回归是一种预测性的,我们是主要根据已有的数据来训练一个回归模型,来预测将要到来的数据的类型。
\text{假设目标值与特征之间线性相关}\\
\hat{y} = wx+b\\\\
\text{我们在定义一个损失函数,假设为均方误差:}\\
L=\frac{1}{n} \sum_{i=1}^{n}(\hat{y_i}-y_i)^2 = \frac{1}{n}\sum_{n=1}^{n}(wx_i+b-y)^2 \\\\
\text{所以现在要最小化损失函数,得到对应的w^*,b^*,即:}\\
(w^*,b^*) = arg \min_{w,b} \sum_{i = 1}^{n}(wx_i+b-y_i)^2
求解$ w^* ,b^*$的方式有两种:
(1)最小二乘法
∂L∂w=2n∑i=1n(wxi+b−yi)xi=2wn∑i=1nxi2−2n∑i=1n(yi−b)xi∂L∂b=2n∑n=1n(wxi+b−yi)=2b+2n∑i=1n(wxi−yi)\frac{\partial L}{\partial w} ...
FFM
FFM
1.介绍
在FM中,将特征与特征之间交互作用的时候,用的是一个变量。在FFM中这一点得到了改进,作者认为一个特征在跟其他特征交互的时候,会发挥不同的作用,因此应该具有不同的向量表示。
2.原理
先把FM的表达式放在这里我们:
y^=w0+∑i=1nwixi+∑i=1n−1∑j=i+1n<vi,vj>xixj\hat y = w_0 + \sum _{i=1}^{n}w_ix_i+\sum_{i=1}^{n-1}\sum _{j=i+1}^{n}<v_i,v_j>x_ix_j
y^=w0+i=1∑nwixi+i=1∑n−1j=i+1∑n<vi,vj>xixj
接下来我们想办法增加一个域,增加一个参数,增强模型的能力。
FM中的特征xix_ixi在跟其他特征交叉的时候,特征xix_ixi使用的是同一个隐向量ViV_iVi,而FFM模型将特征按照事先的规则分为多个场,每个特征将被映射为多个隐向量:Vi1,Vi2,Vi3.....VifV_{i1},V_{i2},V_{i3}.....V_{if}Vi1, ...
激活函数
激活函数
激活函数的意义主要是引入非线性函数,增加神经网络的非线性拟合能力
1.sigmoid
sigmoid函数的输出范围为(0,1),可以作为一个概率的输出值,且输出范围有限,数据传递过程中不易发散。但是饱和的时候,梯度太小。
f(x) = 11+e−xf′(x) = (11+e−x)′ = ((1+e−x)−1)′=(−1)∗(1+e−x)−2∗e−x∗(−1)=(1+e−x)−2∗e−x=e−x(1+e−x)2=11+e−x∗e−x1+e−x=f(x)∗(1−f(x))f(x) \space = \space \frac{1}{1+e^{-x}}
\\\\
f^{'}(x) \space = \space (\frac{1}{1+e^{-x}})^{'} \space = \space ((1+e^{-x})^{-1})^{'} =(-1)*(1+e^{-x})^{-2}*e^{-x}*(-1) \\\\
= (1+e^{-x})^{-2}*e^{-x} = \frac{e^{-x}}{(1+e^{-x})^2} = \frac{1}{1+e^{ ...
梯度下降
梯度下降:
梯度=∇f(x,y)=∂f∂x⋅i+∂f∂y⋅j\text{梯度} = \nabla f(x,y)\\=\frac{\partial f}{\partial x}\cdot i+\frac{\partial f}{\partial y}\cdot j
梯度=∇f(x,y)=∂x∂f⋅i+∂y∂f⋅j
df=∂f∂xdx+∂f∂ydydf = \frac{\partial f}{\partial x}dx+\frac{\partial f}{\partial y}dy
df=∂x∂fdx+∂y∂fdy
z[l]=W[l]⋅a[l−1]+b[l]z^{[l]} = W^{[l]}\cdot a^{[l-1]}+b^{[l]}
z[l]=W[l]⋅a[l−1]+b[l]
正向传播
下面我们探讨一下这个公式(3)的正向计算过程:
我们探讨假如这是第一个隐藏层,处理的是输入的数据 X:
然后的话,我们的 X 假如是(m,n) 的矩阵,然后W是(k,m)的矩阵,b是(k,1)的矩阵
X = \left[
\matrix{
... & ... & ...\\
...
损失函数
损失函数:
最小二乘法
就是说
Min12∑i=1n(xi−yi)2Min \frac{1}{2}\sum_{i=1}^{n}{(x_i-y_i)^2}
Min21i=1∑n(xi−yi)2
最大似然
最大似然估计的意思是啥类,就是说
Max∏i=1n(xi∣yi)Max\prod_{i=1}^{n}(x_i|y_i)
Maxi=1∏n(xi∣yi)
我们在这里假设 xi{x_i}xi 的取值为0或1,y_i表示的是概率
Max∏i=1nyixi(1−yi)1−xiMax\prod_{i=1}^{n}y_i^{x_i}(1-y_i)^{1-x_i}
Maxi=1∏nyixi(1−yi)1−xi
我们想办法把连乘改为连加,采用对数的方法
Max∑i=1n(xilogyi + (1−xi)log(1−yi))Max\sum_{i=1}^{n}(x_i\log y_i\space+\space (1-x_i)\log (1-y_i) )
Maxi=1∑n(xilogyi + (1−xi)log(1−yi))
然后我们一把求最小,所以加一个负号就好了 ...
Python算法
Python算法
一、排序
1.冒泡排序
123456789def buble_sort(num): for i in range(1,len(num)): for j in range(0,len(num)-i): if(num[j]>num[j+1]): num[j], num[j+1] = num[j+1], num[j] return numnum = [1,5,3,26,8,6]buble_sort(num)
2.选择排序
1234567891011def select_sort(num): for i in range(len(num)-1): minindex = i for j in range(i+1,len(num)): if(num[j] < num[minindex]): minindex = j; if minindex != i: n ...
Python爬虫
Python爬虫
1.HTTP协议
一种超文本传输协议,由请求和响应组成。
a. HTTP请求
由三部分组成:请求行+ 请求头+ 请求体
请求行: 请求方法(GET,POST,PUT) + url +http版本 GET /hello.html HTTP/1.1
请求头:包含请求体的长度,请求所支持的MIME类型等
12345678Host: www.example.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflate, brReferer: https://www.example.com/index.htmlConnection: keep-alive
请求体:包含了发 ...
Python函数
二、Python函数
1.函数参数
a. 必选参数
1234def add(x,y): return x+yadd(5,3)
b.默认参数
1234def add(x,y,z=1) return x+y+zadd(5,3)
c.可变参数
用法一:
123456789def add(*numbers): sum = 0 for i in numbers: sum = sum+ i return sumadd()add(1,2)add(2,3,4)
用法二:
123456789def add(*numbers): sum = 0 for i in numbers: sum = sum+ i return suma = [1,2,3,4] #这个地方的*a表示数组a的所有元素。add(*a)
d.关键字参数
12345678def add(**key): sum =0 for k,v in key.items(): sum+=v return sumdic = {'age ...