python-11

逻辑斯蒂回归

逻辑斯蒂回归通常用来解决分类问题,是将样本的特征和样本发生的概率联系起来

在这里插入图片描述

值域是(0,1);t>0时,p>0.5; t<0时,p<0.5

在这里插入图片描述

在这里插入图片描述

该假设函数预测的是分类y=1的发生概率的大小

决策边界
决策边界是用来划分样本的边界分为线性决策边界(y=h_threta(x)-3+x1+x2>=0)和非线性决策边界(y=h_threta(x)-1+x12+x22>=0)
逻辑回归的损失函数

在这里插入图片描述

​ 逻辑回归损失函数的梯度

在这里插入图片描述

在这里插入图片描述

scikit-learn实现逻辑回归

​ scikit-learn逻辑回归多分类问题的解决(ovr策略和ovo策略)
​ 独立的OvO and OvR
​ OVR训练拟合过程
​ OVO与OVR预测过程

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

iris = datasets.load_iris()
X = iris.data
y = iris.target

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)

#ovr (One versus rest策略)

log_reg = LogisticRegression(multi_class=‘ovr’) # one versus rest
log_reg.fit(X_train,y_train)
y_predict = log_reg.predict(X_test)
log_reg.score(X_test,y_test)

#ovo (One versus one策略)====>更准确!

log_reg = LogisticRegression(multi_class=‘multinomial’,
solver=“newton-cg”)

在逻辑回归中使用多项式特征

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(666)
X = np.random.normal(0, 1, size=(200, 2))

y = np.array((X[:,0]**2+X[:,1])<1.5, dtype=‘int’)
for _ in range(20):
y[np.random.randint(200)] = 1

plt.scatter(X[y0,0], X[y0,1])
plt.scatter(X[y1,0], X[y1,1])
plt.show()

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)

#绘制决策边界的函数

def plot_decision_boundary(model, axis):
x0, x1 = np.meshgrid(
np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1),
np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1, 1),
)
X_new = np.c_[x0.ravel(), x1.ravel()]

y_predict = model.predict(X_new)
zz = y_predict.reshape(x0.shape)

from matplotlib.colors import ListedColormap
custom_cmap = ListedColormap([‘#EF9A9A’,‘#FFF59D’,‘#90CAF9’])

plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)

#scikit-learn中的逻辑回归

from sklearn.linear_model import LogisticRegression

log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
log_reg.score(X_train,y_train)
log_reg.score(X_test,y_test)
log_reg.predict(X_test)

plot_decision_boundary(log_reg, axis=[-4, 4, -4, 4])
plt.scatter(X[y0,0], X[y0,1])
plt.scatter(X[y1,0], X[y1,1])
plt.show()

#使用多项式回归的逻辑回归

def PolynomialLogisticRegression(degree, C, penalty=‘l2’):
return Pipeline([
(‘poly’, PolynomialFeatures(degree=degree)),
(‘std_scaler’, StandardScaler()),
(‘log_reg’, LogisticRegression(C=C, penalty=penalty))
])

poly_log_reg = PolynomialLogisticRegression(degree=20, C=0.1, penalty=‘l1’)
poly_log_reg.fit(X_train, y_train)

poly_log_reg.score(X_train, y_train)
poly_log_reg.score(X_test, y_test)

plot_decision_boundary(poly_log_reg, axis=[-4, 4, -4, 4])
plt.scatter(X[y0,0], X[y0,1])
plt.scatter(X[y1,0], X[y1,1])
plt.show()

支持向量机(SVM)

提出原因:不适定问题(决策边界不唯一)
Hard Margin SVM
解决的是线性可分问题:存在一根直线或超平面(在高维空间中)可以将样本点划分,此时才定义出了margin,这样的算法通常称为Hard Margin SVM.

Soft Margin SVM
在真实情况下,很多数据是线性不可分的,此时,SVM可以改进为Soft Margin SVM.

Soft Margin SVM和
SVM的正则化
Soft Margin SVM:有了“双标”,wx+b=1负责SVM的工作,wx+b=1-eta负责容错空间
我们希望有容错空间,但容错空间又不能太大
在这里插入图片描述

​ 前半部分兼顾了Hard Margin SVM对应的最优化内容(SVM的思想所要干的事情);后半部分使得SVM可以容忍一定程度的错误,但容错空间要尽量的小,二者要尽量取得平衡。
SVM的正则化

在这里插入图片描述

​ 正则项前面的常数C,C越大说明相应的容错空间越小,若C取正无穷,则"逼迫"着每个eta都必须等于0,此时的Soft Margin SVM就变成了Hard Margin SVM.

scikit-learn中的SVM

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets

iris = datasets.load_iris()
X = iris.data
y = iris.target

X = X[y<2,:2]
y = y[y<2]

#涉及距离故要标准化

from sklearn.preprocessing import StandardScaler

standardScaler = StandardScaler()
standardScaler.fit(X)
X_standard = standardScaler.transform(X)

from sklearn.svm import LinearSVC

svc = LinearSVC(C=1e9)
svc.fit(X_standard,y)

Hard SVM的最优化公式推导
n维空间中点到直线的距离

SVM的公式推导
目标:最大化margin(2d)

​ 参考ppt

数学扩展

在这里插入图片描述

​ 注意:此时的w其实是去wd
​ 有条件的求极值问题的最简单方法是"拉格朗日乘子法"or"拉普拉斯算子"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值