1机器学习(上)

2019-10-13  本文已影响0人  弟弟们的哥哥

机器学习分三类:

监督学习:Given D={x,y}, learn y=f(x) 当y为离散值时为分类问题,当y为连续值时为回归问题。常用于语音识别,搜索广告,商品推荐,机器翻译,个性化新闻等
无监督学习: Given D={x}, learn y=f(x) 常用于聚类,降维,神经网络预训练等
强化学习:解决的问题是,针对一个具体问题得到一个最优的policy,使得在该策略下获得的reward最大。所谓的policy其实就是一系列action。也就是sequential data。 用于游戏,机器人,自动驾驶等


线性回归

这个不用解释,直接上公式
公式:

image.png 损失函数(均方误差MSE,又叫最小二乘法):
image.png 梯度下降(损失函数求导): image.png 在sklearn中的应用:
#选择基于梯度下降的线性回归模型
from sklearn.linear_model import LinearRegression
LR_reg=LinearRegression()
#进行拟合
LR_reg.fit(x,target)
#使用均方误差用于评价模型好坏
from sklearn.metrics import mean_squared_error
preds=LR_reg.predict(x)   #输入数据进行预测得到结果
mse=mean_squared_error(preds,target)   #使用均方误差来评价模型好坏,可以输出mse进行查看评价值

逻辑回归

逻辑回归分两步走:

from sklearn.linear_model import LogisticRegression
lr=LogisticRegression(multi_class='ovr',solver='sag',class_weight='balanced')
lr.fit(x_tran,y_tran)
score=lr.score(x_tran,y_tran)
print(score) ##最好的分数是1

KNN

KNN简单一句话“近朱者赤,近墨者黑”,工作原理:

所以KNN核心在于距离如何计算,有5种距离计算方式:1. 欧式距离;2.曼哈顿距离;3.闵可夫距离;4.切比雪夫距离;5.余弦距离。前三种是KNN比较常用的。

欧式距离:两点在空间中的距离
二维空间中是

image.png n维空间中是
image.png 曼哈顿距离:两点在坐标系上绝对轴综合
image.png 闵可夫距离:不是一个距离,是一组距离的定义,P代表空间维度,P=1时,就是曼哈顿距离;P=2时,就是欧式距离;P无穷大时,就是切比雪夫距离。
image.png 余弦距离:计算的是两个向量的夹角,在方向上计算两者的差异。比如word embedding中两个词转换成one-hot编码,然后通过计算这两个词的余弦距离来判断这两个词的相似性。

KNN计算过程是大量计算样本点之间的距离。为了减少计算距离次数,提升KNN搜索效率,提出了KD树(K-Dimensional)。在KD树种,每个节点都是K维熟知点的二叉树,既然是二叉树,就可以采用二叉树的增删改查操作,这样就大大提升了搜索效率。

KNN分类

from sklearn.neighbors import KNeighborsClassifier

KNN回归

from sklearn.neighbors import KNeighborsRegressor

如何在 sklearn 中创建 KNN 分类器。使用构造函数

KNeighborsClassifier(n_neighbors=5, weights=‘uniform’,algorithm=‘auto’, leaf_size=30)

SVM

想象一下一个空间散落着正样本和负样本,如果能找到一个超平面,正好能将正负样本分开。你脑子里就会问怎么去找到这个超平面,如果找不到怎么尽可能找到最接近的超平面来对正负样本进行分类,这就是SVM要解决的问题。(如果在一维空间就是一个点,二维空间就用一条线来区分,三维空间用超平面来分类,依次类推。用来区分的我们统称为超平面)

1. 完全线性可分情况下的线性分类器,也就是线性可分的情况,是最原始的SVM,它最核心的思想就是找到最大的分类间隔;

d代表是xi到超平面wxi+b的欧式距离,我们想得到d的最小值。||w||为超平面的范数,范数是向量的大小。


image.png 然后是分类超平面ll和NN个样本xixi的“间隔”的表达式: image.png 接着求解能使间隔最大化的参数w和b,即求解以下优化函数:
image.png

2. 大部分线性可分情况下的线性分类器,引入了软间隔的概念。软间隔,就是允许一定量的样本分类错误;

硬软间隔:如果数据是完全线性可分的,那么学到的模型都可称为硬间隔,就是把数据完全分类准确。软间隔,就是容许一定量的样本分类错误。实际中数据一般没那么“干净”,或多或少都存在早点,所以线性可分是个理想情况,都会使用到软间隔。

image.png
3. 线性不可分情况下的非线性分类器,引入了核函数。它让原有的样本空间通过核函数投射到了一个高维的空间中,从而变得线性可分。

核函数:下图这种情况就没法处理,所以可以将样本从原始空间映射到一个更高维度的特质空间中,是的样本在新空间中线性可分。

image.png 所以在非线性 SVM 中,核函数的选择就是影响 SVM 最大的变量。最常用的核函数有线性核、多项式核、高斯核、拉普拉斯核、sigmoid 核,或者是这些核函数的组合。这些函数的区别在于映射方式的不同。通过这些核函数,我们就可以把样本空间投射到新的高维空间中。

Sklearn中的svm

from sklearn import svm

回归时,用SVR或linearSVR
分类时,用SVC或LinearSVC

如何创造一个SVM分类器:

  1. 用SVC 的构造函数:model = svm.SVC(kernel=‘rbf’, C=1.0, gamma=auto’),这里有三个重要的参数 kernel、C 和 ggamma。kernel 代表核函数的选择,它有四种选择,只不过默认是 rbf,即高斯核函数。 linear:线性核函数 poly:多项式核函数 rbf:高斯核函数(默认) sigmoid:sigmoid 核函数。
  2. 输入训练集进行训练 model.fit(train_x, train_y)
  3. model.predict(test_y)进行预测得到prediction.

同样我们也可以创建线性 SVM 分类器,使用 model=svm.LinearSVC()。在 LinearSVC 中没有kernel 这个参数,限制我们只能使用线性核函数。由于 LinearSVC 对线性分类做了优化,对于数据量大的线性可分问题,使用 LinearSVC 的效率要高于 SVC。

上一篇 下一篇

猜你喜欢

热点阅读