逻辑回归实验

目录

一、理论知识

1.逻辑回归的作用

2.sigmoid函数 

二、代码实现

1.定义训练数据和测试数据

2.绘制训练数据的散点图

3.LogisticRegression模型进行训练和预测 

4. 输出测试结果

5. 测试结果的散点图

三、总结

一、理论知识

1.逻辑回归的作用

逻辑回归不是一个回归的算法,逻辑回归是一个分类的算法

2.sigmoid函数 

逻辑回归中对应一条非常重要的曲线S型曲线,对应的函数是Sigmoid函数: 

f(x)=\frac{1}{1+e^{^{-x}}} 

其函数图像如下: 

 确定一个分界线,在直线一边的数据点全为正样本,另一边的数据点则全为负样本。

二、代码实现

1.定义训练数据和测试数据

训练集:

# 训练数据,密度和含糖率
density = np.array([0.697, 0.774, 0.634, 0.608, 0.556, 0.403, 0.481, 0.437, 0.666, 0.243]).reshape(-1, 1)
sugar_rate = np.array([0.460, 0.376, 0.264, 0.318, 0.215, 0.237, 0.149, 0.211, 0.091, 0.267]).reshape(-1, 1)

X_train = np.hstack((density, sugar_rate))
y_train = np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0])

测试集:

# 测试数据
density_test = np.array([0.245, 0.343, 0.639, 0.657, 0.360, 0.593, 0.719]).reshape(-1, 1)
sugar_rate_test = np.array([0.042, 0.103, 0.161, 0.198, 0.370, 0.057, 0.099]).reshape(-1, 1)
X_test = np.hstack((density_test, sugar_rate_test))
y_test = np.array([0, 0, 1, 1, 0, 0, 0])

2.绘制训练数据的散点图

# 画出特征的散点图
plt.scatter(density.flatten(), sugar_rate.flatten(), c=y_train, cmap='coolwarm', label='Good(1) vs. Bad(0)')
plt.xlabel('Sugar Rate')
plt.ylabel('Density')
plt.legend(handles=[plt.Line2D([0], [0], marker='o', color='w', markerfacecolor='r', markersize=10, label='Good'),
plt.Line2D([0], [0], marker='o', color='w', markerfacecolor='b', markersize=10, label='Bad')])
plt.title('Scatter Plot of Sugar Rate vs. Density')
plt.show()

可视化结果:

3.LogisticRegression模型进行训练和预测 

# 训练
model = LogisticRegression()
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)

4. 输出测试结果

# 显示是否预测正确
print('预测结果是:', y_pred)
print('真实结果是:', y_test)
# 计算概率
proba_ = model.predict_proba(X_test)
print('预测概率是:\n', proba_)

可视化结果: 

在预测结果中分别输出了每个测试集是坏瓜和好瓜的概率。 

5. 测试结果的散点图

# 画出测试集预测结果的散点图
plt.scatter(density_test.flatten(), sugar_rate_test.flatten(), c=y_pred, cmap='coolwarm', label='Predicted')
plt.xlabel('Sugar Rate')
plt.ylabel('Density')
plt.legend(handles=[plt.Line2D([0], [0], marker='o', color='w', markerfacecolor='r', markersize=10, label='Bad'),
                    plt.Line2D([0], [0], marker='o', color='w', markerfacecolor='b', markersize=10, label='Good')])
plt.title('Scatter Plot of Sugar Rate vs. Density (Predicted)')

# 画出sigmoid曲线的决策分界线
x_min, x_max = density_test.min() - .1, density_test.max() + .1
y_min, y_max = sugar_rate_test.min() - .1, sugar_rate_test.max() + .1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100))
Z = model.predict_proba(np.c_[xx.ravel(), yy.ravel()])
Z = Z[:, 1].reshape(xx.shape)
plt.contour(xx, yy, Z, levels=[0.5], colors='k')

plt.show()

可视化结果:

三、总结

        该实验利用逻辑回归模型对含糖率和密度数据进行训练,并在测试集上进行预测。逻辑回归通过学习训练数据,找到一个决策边界,将特征空间划分为两个区域,从而实现对样本的分类。

        绘制了散点图展示了训练数据和测试数据的分布情况,并在测试集预测结果的散点图中画出了Sigmoid函数的决策分界线,用于展示模型的分类效果。

        完成该实验不仅让我掌握逻辑回归模型的基本流程,还学会了如何利用可视化工具更好地理解数据和模型的表现。 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值