1机器学习(上)

机器学习分三类:

监督学习: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进行查看评价值

逻辑回归

逻辑回归分两步走:

  • 第一步是输入x的线性回归函数
  • 第二步通过逻辑函数,如sigmoid将线性转换为非线性sigmoid公式
    image.png
    求导:
    image.png
    损失函数:
    如果和线性回归一样,用MSE做为损失函数会出现什么情况?
    image.png
    函数非凸,很容易陷入局部最优解,如果有最大似然函数作为损失函数了?
    image.png
    这样成了凸函数,很容易求得参数最优解。既然用最大似然,那肯定是要最大化似然概率
    image.png
    对于二分类来说
    image.png
    相乘之后就是:
    image.png
    代入后:
    image.png

    如果用hθ(xi)表示p0,1 - hθ(xi)表示p1,将max函数换成min,则得到最终形式:
    image.png
    在sklearn中的应用:
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简单一句话“近朱者赤,近墨者黑”,工作原理:

  • 1.计算待分物体与其他物体之间的距离
    1. 统计距离最近的K个邻居
    1. 对于K个邻居,它们属于哪个分类最多,待分物体就属于哪一类

所以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)
  • 1.n_neighbors:即 KNN 中的 K 值,代表的是邻居的数量。K 值如果比较小,会造成过拟合。如果 K 值比较小,会造成过拟合。如果 K 值比较大,无法将未知物体分类出来。一般我们使用默认值 5。
  • 2.weights:是用来确定邻居的权重,有三种方式: weights=uniform,代表所有邻居的权重相同; weights=distance,代表权重是距离的倒数,即与距离成反比; 自定义函数,你可以自定义不同距离所对应的权重。大部分情况下不需要自己定义函数。
  • 3.algorithm:用来规定计算邻居的方法,它有四种方式: algorithm=auto,根据数据的情况自动选择适合的算法,默认情况选择 auto; algorithm=kd_tree,也叫作 KD 树,是多维空间的数据结构,方便对关键数据进行检索,不过 KD 树适用于维度少的情况,一般维数不超过 20,如果维数大于 20 之后,效率反而会下降; algorithm=ball_tree,也叫作球树,它和 KD 树一样都是多维空间的数据结果,不同于 KD 树,球树更适用于维度大的情况;algorithm=brute,也叫作暴力搜索,它和 KD 树不同的地方是在于采用的是线性扫描,而不是通过构造树结构进行快速检索。当训练集大的时候,效率很低。
  • 4.leaf_size:代表构造 KD 树或球树时的叶子数,默认是 30,调整 leaf_size 会影响到树的构造和搜速度。

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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容