逻辑斯蒂回归模型及非线性分类任务

释放双眼,带上耳机,听听看~!
本文介绍了逻辑斯蒂回归模型及其在非线性分类任务中的应用,包括预处理函数、多项式特征的使用以及分类决策可视化。

本文已参与「新人创作礼」活动,一起开启掘金创作之路

逻辑斯蒂回归模型

上节内容,我们得到逻辑斯蒂回归模型,需要注意虽然名称叫做回归模型,但是它是解决分类任务,公式如下:

y=11+e−(wTX+b)y = frac {1}{1+e^{-(w^T X +b)}}

上节中,我们使用逻辑回归模型完成了线性可分的任务,那么,如果线性不可分任务,逻辑回归任务可以完成吗?

同样,我们可以将自变量x的数据,进行多项式特征扩展,扩展后的数据特征可以完成非线性分类任务。

非线性分类任务分割案例

1.我们尝试使用函数构建两类不能线性划分的随机样本点。

逻辑斯蒂回归模型及非线性分类任务

2.使用预处理函数PolynomialFeatures,构建多项式特征。
3.训练模型
4.使用contourf绘制等高线,进行分类决策可视化。

逻辑斯蒂回归模型及非线性分类任务

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
from sklearn.metrics import classification_report
from sklearn.datasets import make_gaussian_quantiles
from sklearn.preprocessing import PolynomialFeatures

np.random.seed(2)
count=100
data=[]
for i in range(count):
    x1=np.random.normal(1,2)
    res1=x1*x1+1+np.random.normal(0.00,3)
    data.append([x1,res1,1])
    
    x2=np.random.normal(1,2)
    res2=x2*x2+16+np.random.normal(0.00,3)
    data.append([x2,res2,0])

data =pd.DataFrame(data)


x1_data=np.array(data[0])
x2_data=np.array(data[1])
plt.scatter(x1_data,x2_data,c=data[2])
plt.show()
x_data=data.iloc[:,:2]
y_data=data.iloc[:,2]
# 生成2维正态分布,生成的数据按分位数分为两类,500个样本,2个样本特征
# 可以生成两类或者多类数据
# x_data, y_data = make_gaussian_quantiles(n_samples=500, n_features=2, n_classes=2)

# 定义多项式回归,degree的值可以调节多项式的特征
poly_reg = PolynomialFeatures(degree=3)  # 得到非线性方程y = theta0+theta1*x1+theta2*x1^2+theta3*x1*x2+theta4*x^2所需的样本数据
# 特征处理(获取多项式相应特征所对应的样本数据)
x_poly = poly_reg.fit_transform(x_data)

# 训练模型
model = linear_model.LogisticRegression()
model.fit(x_poly, y_data)

# 获取数据值所在的范围
x_min, x_max = x1_data.min() - 1, x1_data.max() + 1
y_min, y_max = x2_data.min() - 1, x2_data.max() + 1

# 生成网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))
# 测试点的预测值
z = model.predict(poly_reg.fit_transform(np.c_[xx.ravel(), yy.ravel()]))
for i in range(len(z)):
    if z[i] > 0.5:
        z[i] = 1
    else:
        z[i] = 0

z = z.reshape(xx.shape)
# 绘制等高线图
cs = plt.contourf(xx, yy, z)
plt.scatter(x1_data, x2_data, c=y_data)

# 计算准确率,召回率,F1值
print(classification_report(y_data, model.predict(x_poly)))
print('score:', model.score(x_poly, y_data))
plt.show()

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

ChatGPT国内镜像站评测

2023-12-16 21:42:14

AI教程

探索音视频技术的极致-稀土开发者大会2023精彩预告

2023-12-16 21:56:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索