题目四:使用 numpy 编写逻辑回归算法,对 iris 数据进行二分类。 具体内容: (1)任选两个特征和两个类别进行二分类。 (2)输出:决策函数的参数、预测值、分类准确率等。 (3)可视化:选取两个特征进行散点图可视化,并可视化决策边界。

时间: 2024-02-19 11:03:50 浏览: 25
好的,针对您的问题,我将为您提供一个使用numpy编写逻辑回归算法的示例程序,并对iris数据集进行二分类预测。 (1)选择两个特征和两个类别进行二分类 在本次任务中,我们选择花瓣长度和花瓣宽度这两个特征,并将Setosa和Versicolor这两种鸢尾花作为正负类别。 (2)输出决策函数的参数、预测值、分类准确率等 在本次任务中,我们使用逻辑回归算法进行分类预测。在模型训练中,我们将使用梯度下降法来求解模型参数,并使用测试集进行模型预测,并计算模型的准确率。下面是代码实现: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt # 加载数据集 data = pd.read_csv('iris.csv') data = data[data['species'].isin(['setosa', 'versicolor'])] data['species'] = data['species'].map({'setosa': 0, 'versicolor': 1}) X = data[['petal_length', 'petal_width']].values y = data['species'].values # 数据预处理 X = (X - np.mean(X, axis=0)) / np.std(X, axis=0) train_X, train_y = X[:80], y[:80] test_X, test_y = X[80:], y[80:] # 定义模型函数 def sigmoid(z): return 1 / (1 + np.exp(-z)) def predict(X, w, b): z = np.dot(X, w) + b y_pred = sigmoid(z) return y_pred def loss(y, y_pred): return -np.mean(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred)) def gradient(X, y, y_pred): dw = np.dot(X.T, (y_pred - y)) / len(y) db = np.mean(y_pred - y) return dw, db # 初始化模型参数 w = np.random.rand(2) b = np.random.rand() # 模型训练 epochs = 1000 learning_rate = 0.1 for epoch in range(epochs): y_pred = predict(train_X, w, b) l = loss(train_y, y_pred) dw, db = gradient(train_X, train_y, y_pred) w -= learning_rate * dw b -= learning_rate * db if epoch % 100 == 0: print('epoch: {}, loss: {:.4f}'.format(epoch, l)) # 模型预测 y_pred = predict(test_X, w, b) y_pred[y_pred >= 0.5] = 1 y_pred[y_pred < 0.5] = 0 accuracy = np.mean(y_pred == test_y) print('accuracy: {:.2f}%'.format(accuracy * 100)) # 输出决策函数的参数 print('w: {}, b: {}'.format(w, b)) # 可视化预测结果和决策边界 x_min, x_max = test_X[:, 0].min() - 0.5, test_X[:, 0].max() + 0.5 y_min, y_max = test_X[:, 1].min() - 0.5, test_X[:, 1].max() + 0.5 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02)) Z = predict(np.c_[xx.ravel(), yy.ravel()], w, b) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral) plt.scatter(test_X[:, 0], test_X[:, 1], c=test_y, cmap=plt.cm.Spectral) plt.xlabel('petal length') plt.ylabel('petal width') plt.show() ``` (3)可视化数据集和决策边界 我们可以使用matplotlib库对数据集进行散点图可视化,并可视化逻辑回归的决策边界。下面是代码实现: ```python # 可视化数据集和决策边界 x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5 y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02)) Z = predict(np.c_[xx.ravel(), yy.ravel()], w, b) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral) plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral) plt.xlabel('petal length') plt.ylabel('petal width') plt.show() ``` 运行以上代码后,我们可以看到数据集和决策边界的可视化图像。

相关推荐

最新推荐

recommend-type

【K-means算法】{1} —— 使用Python实现K-means算法并处理Iris数据集

此处基于K-means算法处理Iris数据集 Kmeans.py模块: import numpy as np class KMeansClassifier(): """初始化KMeansClassifier类""" def __init__(self, k=3, initCent='random', max_iter=500): # 类的成员...
recommend-type

node-v0.8.10-sunos-x64.tar.gz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

【课程设计】实现的金融风控贷款违约预测python源码.zip

【课程设计】实现的金融风控贷款违约预测python源码.zip
recommend-type

node-v0.10.27-x86.msi

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

课设毕设基于SSM的高校二手交易平台-LW+PPT+源码可运行.zip

课设毕设基于SSM的高校二手交易平台--LW+PPT+源码可运行
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。