机器学习基础一
1.机器学习的一些概念
有监督 无监督 泛化 过(欠)拟合 交叉验证
1.有监督学学习 (Supervised learning) 即数据集有label,通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到输出,如分类、回归问题。
2. 半监督学习 综合利用有类标签的数据和没有类标签的数据,来生成合适的分类函数。
有监督、无监督、泛化能力、过拟合欠拟合(方差和偏差以及各自解决办法)、交叉验证。
3.无监督学习(Unsupervised Learning)目的是对原始资料进行分类,以便了解资料内部结构,区别于监督式学习网络,无监督式学习网络在学习时并不知道其分类结果是否正确,亦即没有受到监督式增强(告诉它何种学习是正确的)。其特点是仅对此种网络提供输入范例,而它会自动从这些范例中找出其潜在类别规则。当学习完毕并经测试后,也可以将之应用到新的案例上,如聚类。
4.泛化能力是指机器学习算法对新鲜样本的适应能力。 学习的目的是学到隐含在数据背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。
5.过拟合(overfitting)是指为了得到一致假设而使假设变得过度严格。 避免过拟合是分类器设计中的一个核心任务,通常采用1.增大数据量和测试样本集的方法,2.正则化(
l
1
l1
l1、
l
2
l2
l2 )正则化)对分类器性能进行评价。
6.欠拟合(underfitting)模型不能够很好地拟合数据。采用增加新特征、尝试非线性模型,减小正则化参数
λ
\lambda
λ的值等可以解决欠拟合问题。
7.交叉验证 交叉验证的基本想法是重复地使用数据;把给定的数据进行切分,将切分的数据集组合为训练集和测试集,再次基础上反复的进行训练、测试以及模型的选择。
- 7.1 简单交叉验证–首先随机地将已给数据分为两部分,一部分作为训练集,一部分作为测试集;然后训练集在各种条件下(例如,不同的参数个数)训练模型,从而得到不同的模型;在测试集上评价各个模型的测试误差,选出测试误差最小的模型。
- 7.2 S折交叉验证–首先随机地将已给数据切分为S个互不相交的大小相同的子集;然后利用S-1个子集的数据训练模型,利用余下的子集测试模型;将这一过程对可能的S种选择重复进行;最后选出S次评测中平均测试误差最小的模型。
- 7.3 留一交叉验证–S折交叉验证的特殊情形是S=N,成为留一交叉验证,往往在数据缺乏的情况下使用。这里N为给定数据的容量。
2.线性回归的原理
对于线性回归就是找到最适合的一条线(想象一个高维)来最好的拟合我们的数据。
h
θ
(
x
1
,
x
2
,
…
,
x
n
)
=
θ
0
+
θ
1
x
1
+
…
+
θ
n
x
n
h_\theta(x_1,x_2,…,x_n)=\theta_0+\theta_1x_1+…+\theta_nx_n
hθ(x1,x2,…,xn)=θ0+θ1x1+…+θnxn
3.线性回归损失函数、代价函数、目标函数
- 损失函数(Loss):样本模型真实值( y y y)与预测值( y ^ \hat{y} y^)之间的误差,即: l o s s = ( y − y ^ ) 2 loss=(y-\hat{y})^2 loss=(y−y^)2,损失函数越小,拟合越好
- 代价函数(Cost):
J ( θ ) = 1 2 m ∑ i = 1 m ( y ^ i − y i ) 2 = 1 2 m ∑ i = 1 m ( h θ ( x i ) − y i ) 2 J(\theta)=\frac{1}{2m}\sum _{i=1} ^{m}(\hat{y}^{i}-y^{i})^2=\frac{1}{2m}\sum _{i=1} ^{m}(h_\theta(x^{i})-y^{i})^2 J(θ)=2m1i=1∑m(y^i−yi)2=2m1i=1∑m(hθ(xi)−yi)2 - 目标函数:表示误差的损失函数,代价函数,加入了正则惩罚项后得到的最终优化函数。
J ( θ ) = 1 2 m ∑ i = 1 m ( y ^ i − y i ) 2 = 1 2 m [ ∑ i = 1 m ( h θ ( x i ) − y i ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac{1}{2m}\sum _{i=1} ^{m}(\hat{y}^{i}-y^{i})^2=\frac{1}{2m}[ \sum _{i=1} ^{m}(h_\theta(x^{i})-y^{i})^2+\lambda\sum _{j=1} ^{n}\theta_j^2] J(θ)=2m1i=1∑m(y^i−yi)2=2m1[i=1∑m(hθ(xi)−yi)2+λj=1∑nθj2]
4.优化方法
梯度下降法
(Gradient descent)是一个一阶最优化算法,通常也称为最速下降法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。
更新所有的
θ
i
\theta_i
θi表示为
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
0
m
(
h
θ
(
x
(
i
)
)
−
y
i
)
x
0
(
i
)
\theta_0:=\theta_0-\alpha\frac{1}{m}\sum _{i=0} ^{m}(h_\theta(x^{(i)})-y^i)x_0^{(i)}
θ0:=θ0−αm1∑i=0m(hθ(x(i))−yi)x0(i)
θ
j
:
=
θ
k
−
α
1
m
∑
i
=
0
m
(
h
θ
(
x
(
i
)
)
−
y
i
)
x
k
(
i
)
−
λ
m
θ
j
(
j
=
1
,
2
,
…
,
n
)
\theta_j:=\theta_k-\alpha\frac{1}{m}\sum _{i=0} ^{m}(h_\theta(x^{(i)})-y^i)x_k^{(i)}-\frac{\lambda}{m}\theta_j (j=1,2,…,n)
θj:=θk−αm1∑i=0m(hθ(x(i))−yi)xk(i)−mλθj(j=1,2,…,n)
牛顿法
牛顿法的基本思想是利用迭代点 x k x_k xk处的一阶导数(梯度)和二阶导数(Hessen矩阵)对目标函数进行二次函数近似,然后把二次模型的极小点作为新的迭代点,并不断重复这一过程,直至求得满足精度的近似极小值。牛顿法的速度相当快,而且能高度逼近最优值。牛顿法分为基本的牛顿法和全局牛顿法。
拟牛顿法
在每一步迭代时只要求知道目标函数梯度,通过测量梯度变化构造一个目标函数的模型,使之产生超线性收敛性。不需要二阶层数信息。可以用来解决无约事,约事,和大规模的优化问题。
它是解非线性方程组及最优化计算中最有效的方法之一。
BFGS算法是使用较多的一种拟牛顿方法
5. 线性回归评估指标
1.SSE(误差平方和):即前面所述loss函数
l
o
s
s
=
(
y
−
y
^
)
2
loss=(y-\hat{y})^2
loss=(y−y^)2,同样的数据集的情况下,SSE越小,误差越小,模型效果越好。但是随着样本增加,SSE必然增加。
2.R-square(决定系数):(coefficient of determination)决定系数反应了y的波动有多少百分比能被x的波动所描述,即表征依变数Y的变异中有多少百分比,可由控制的自变数X来解释.
R
2
R^2
R2越接近1,表示方程变量对y的解释能力越强,模型对数据拟合越好,反之越差
3.Adjusted R-square:校正决定系数。加入样本数据和特征数据评价指标,消除了样本数据和特征数量的影响。
6.sklearn参数解释
sklearn 线性回归LinearRegression()参数:
首先要对数据训练集以及测试集进行构造
from sklearn.cross_validation import train_test_split
linreg = LinearRegression()
linreg.fit(X_train, y_train)
导入sklearn线性回归:
from sklearn.linear_model import LinearRegression
model=LinearRegression()的参数:
- fit_intercept: 是否存在截距,默认存在
- normalize: 标准化开关,用于将数据归一化,默认关闭
- copy_X:默认为True,当为True时,X会被copied,否则X将会被覆写
- n_jobs:默认值为1,线程数目
默认操作:
linreg = LinearRegression()
linreg.fit(X_train, y_train)
print(linreg.intercept_)–截距
print(linreg.coef_)–系数