机器学习(一)
(一)监督学习和无监督学习
监督学习:
回归(预测值 如三个月后卖出的货物数量)
分类(0 1问题 如这个账户是否被盗过 是 否)
有标记好的数据 如垃圾邮件
无监督学习:
自动进行分类 如新闻分类、戏份市场、区分声音
(二)线性回归:
单变量线性回归:
主要思想:不断调整参数,使预测函数到样本点的距离和最小。
核心算法:梯度下降
参数含义:
- m:训练集中实例的数量
- x:输入变量/特征 x2(3)第三个实例的第二个参数
- y:目标变量/输出变量
- h:假设函数
- theta:参数
- J(theta):代价函数
- alpha:学习率(相当于调整参数的速度)
目标:找到是代价函数的导数最小时的theta(相当于下图,导数为零时是最小值)
梯度下降算法:注意如何对代价函数J求导
可以使用矩阵相乘
样本:[x1, y1; x2, y2; x3, y3; …, …; xm, ym]
theta = [theta0; theta1; theta2; …; thetan]
X = [1, x1; 1, x2; 1, x3; …; 1, xm]
y = [y1; y2; y3; …;ym]
delta = ((X * theta - y)' * X * alpha / m)'; theta = theta - delta;
求导后的结果 J(thata)分别对theta1和theta2求导
多变量梯度下降:
和单变量类似
公式:(使用矩阵相乘的方法,代码和单变量一毛一样)
小tips:
1、特征缩放
尽量将所有特征缩放到-1~1的区间
注意:计算的是所给样本的平均值和标准差,不是样本可能取值的。
2、学习率
如果学习率过小,则达到收敛所需的迭代次数会非常高;如果学习率过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
参考值:alpha = 0.01、0.03、0.1、1、3、10
3、特征和多项式回归
若x是二次幂、三次幂或者更多,可以先另x = x^n,然后同线性回归类似
注:如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
4、正规方程
pinv(X'*X)*X'*y
要先转置再取逆是因为只有方阵才能求逆
(三)Matlab 基本操作:
行向量
v = 1 : 0.1 : 2 从1开始,增量为0.1,直到加到2
生成矩阵
ones(2,3) 元素都为1的两行三列矩阵
zeros(2,3) 元素都为0
rand(2,3) 元素为0-1之间的随机数
randn(1,3) 正态分布 均值为0,方差或等于1的标准差
eye(6) 单位矩阵
hist 绘制直方图
size(A) 返回矩阵大小
size(A,1) 返回矩阵的第一个元素
length(A) 返回矩阵最大维度大小
who 显示所有变量
v = priceY(1:10) 将向量Y的前十个元素存入v中
A(2,3) 返回矩阵A第2行第3列的元素
A(2,:) 返回第二行所有元素
A([1 3], :) 返回第一行和第三行的每一列
C = [A B] A和B左右拼接
C = [A;B] 上下拼接
plot(t, y1) 画图 hold on将新图画在旧图上
xlabel('time’)标记X轴;ylabel('value') 标记Y轴
load(‘a.txt’) 读取文件
save hello.mat v 将v储存问hello.mat
(四)逻辑回归
和线性回归差不多吧,,但是只有0 和 1 ,,主要就是假设函数h(theta)变成了sigmoid函数
代价函数:
求导过程:不重要,反正你也不会看
一对多的问题:
将每次都将一种当作1 其他当作0,计算每一种情况
(五)正则化(正则化指的就是加入一个惩罚函数对模型向量进行惩罚)
过拟合问题
1、什么是过拟合
可以非常好的拟合训练集,但是在进行预测时可能效果不好
2、如何处理过拟合问题
- 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)
- 正则化。 保留所有的特征,但是减少参数的大小(magnitude)。
3、代价函数
从上图可以看出,出现过拟合的原因一般是高次项导致的,所以我们需要让高次项的系数接近于0,可是当特征很多时,我们不知道需要惩罚那些特征,所以可以做以下的简单假设
加入后面一项,使J(theta)变大了,,可是最后我们要得到代价函数尽可能的小,所以theta的值会一定程度上减小(不包括