import numpy as np
import pandas as pddata = pd.read_csv("iris.csv")
#去掉不需要的列
data.drop("id",axis=1,inplace=True)
data.drop_duplicates(inplace=True)
#实现映射操作
data['Species'] = data['Species'].map({'Iris-versicolor':0,'Iris-setosa':1,'Iris-virginica':2})
#对数据进行筛选,只选取类型为0,1的数据,进行逻辑回归二分类
data = data[data['Species'] != 2]
data
class LogisticRegression:"""使用python实现逻辑回归算法"""def __init__(self,alpha,times):"""初始化方法:Parameters:----alpah:float学习率times : int迭代次数"""self.alpha = alphaself.times = timesdef sigmoid(self,z):"""sigmoid函数的实现Parameters:----z: float自变量,值为:z = w.T * xReturn:----result:float,值为[0,1]之间返回样本属于类别一的概率值,用于结果的预测当s > 0.5(z>=0)时,判定为类别一,否则判定为类别0"""return 1.0 / (1.0 + np.exp(-z))def fit(self, X, y):"""根据训练数据,对模型进行训练Parameters:----X : 类数组类型,形状[样本数量,特征数量]待训练的样本的特征属性y : 类数组类型。形状为[样本数量]每个样本的目标值(标签)"""#将X,y转换成ndarray数组X = np.asarray(X)y = np.asarray(y)#初始化权重,初始值为0,长度比特征数多1,多出来的一个为截距self.w_ = np.zeros(1 + X.shape[1])#创建损失列表,用来保存每次迭代后的损失值self.loss_ = []for i in range(self.times):z = np.dot(X,self.w_[1:]) + self.w_[0]#计算概率值(判定结果一的概率值)p = self.sigmoid(z)#损失值,根据逻辑回归的目标函数,计算损失值。#目标函数:J(w) = - sum(yi * log(s(zi)) + (1-yi) * log(1-s(zi)))【i从1到n】cost = -np.sum((y * np.log(p)) + (1 - y) * np.log(1-p))self.loss_.append(cost)#更新权重,公式:权重(j) = 权重(j) + 学习率 * sum((y - s(zi))* xj)self.w_[0] += self.w_[0] + self.alpha * np.sum(y - p)self.w_[1:] += self.w_[1:] + self.alpha * np.dot(X.T,y-p)def predict_proba(self,X):"""根据参数传递的样本,对样本数据进行预测Parameters-----X:类数组类型,形状为[样本数量,样本特征数量]待测试样本的属性特征Return----result:数组类型预测的结果(概率值)"""X = np.asarray(X)z = np.dot(X,self.w_[1:]) + self.w_[0]p = self.sigmoid(z)#将预测结果转换成二维结构p = p.reshape(-1,1)#将两个数据进行拼接return np.concatenate([1-p,p],axis=1)def predict(self,X):"""根据参数传递的样本,对样本数据进行预测Parameters:----X:类数组类型,形状[样本数量,特征数量]待测试的样本特征(属性)Returns:-----result: 数组类型预测结果(分类值)"""return np.argmax(self.predict_proba(X),axis = 1)
#构建测试集与训练街
t0 = data[data['Species'] == 0]
t1 = data[data['Species'] == 1]
t0 = t0.sample(len(t0),random_state = 0)
t1 = t1.sample(len(t1),random_state = 0)train_X = pd.concat([t0.iloc[:40,:-1],t1.iloc[:40,:-1]],axis = 0)
train_y = pd.concat([t0.iloc[:40,-1],t1.iloc[:40,-1]],axis = 0)
test_X = pd.concat([t0.iloc[40:,:-1],t1.iloc[40:,:-1]],axis = 0)
test_y = pd.concat([t0.iloc[40:,-1],t1.iloc[40:,-1]],axis = 0)#鸢尾花特征列都在同一个数量级,这里可以不用标准化处理
lr = LogisticRegression(alpha=0.01,times=20)
lr.fit(train_X,train_y)
#预测概率值
display(lr.predict_proba(test_X))
#类别预测
result = lr.predict(test_X)
display(result)
#计算准确性
np.sum(result == test_y) / len(test_X)
#对计算结果进行可视化展示
import matplotlib as mpl
import matplotlib.pyplot as plt
#设置matplotlib 支持中文显示
mpl.rcParams['font.family'] = 'SimHei' #设置字体为黑体
mpl.rcParams['axes.unicode_minus'] = False #设置在中文字体是能够正常显示负号(“-”)#设置画布大小
plt.figure(figsize=(8,8))
#绘制预测值
plt.plot(result,"ro",ms = 15,label="预测值")
plt.plot(test_y.values,"go",label="真实值")
plt.title("逻辑回归")
plt.xlabel("样本序号")
plt.ylabel("类别")
plt.legend()
plt.show()

#绘制目标函数损失值
plt.plot(range(1,lr.times + 1),lr.loss_,'go--')

逻辑回归-鸢尾花数据集相关推荐

  1. 机器学习【逻辑回归】——logistic函数逻辑回归鸢尾花分类

    logistic函数 我们可能会遇到一些分类问题,例如想要划分鸢尾花的种类,尝试基于一些特征来判断鸢尾花的品种,或者判断房子,在6个月之后能否被卖掉,答案是是或者否,或者一封邮件是否是垃圾邮件.所以这 ...

  2. 逻辑回归——一文带你搞懂逻辑回归原理

    目录   1.逻辑回归的由来   2.逻辑回归模型建立过程中存在的两个问题     1)问题一:如何将等式左右连续化     2)问题二:使用sigmoid函数,将任意范围的值,映射为(0,1)    ...

  3. 【机器学习】逻辑回归(LogisticRegression)原理与实战

    文章目录 前言 一.什么是逻辑回归 1.1 逻辑回归基础概念 1.2 逻辑回归核心概念 二.逻辑回归Demo 2.1 数据准备 2.2 创建逻辑回归分类器 2.3 分类器预测 三.逻辑回归实战 3.1 ...

  4. 基于逻辑回归构建肿瘤预测模型

    使用逻辑回归构建肿瘤预测模型 描述 乳腺癌数据集包括569个样本,每个样本有30个特征值(病灶特征数据),每个样本都属于恶性(0)或良性(1)两个类别之一,要求使用逻辑回归(LR)算法建立预测模型,实 ...

  5. python简单的人脸识别系统(PCA+逻辑回归)

    python简单的人脸识别系统(PCA+逻辑回归) 数据集:ORL人脸库 特征提取:PCA降维,将112*92降成30 分类器:逻辑回归 ** 代码: from tkinter import * fr ...

  6. 风控评分卡模型——逻辑回归

    目录 1.评分卡模型解释 2.探索性数据分析 3.数据预处理 4.构建逻辑回归模型 数据集:数据 1.评分卡模型解释 一个用户总的评分等于基准分加上对客户各个属性的评分.客户评分=基准分+年龄评分+性 ...

  7. 如何度量逻辑回归模型表现

    本文通过R实现逻辑回归模型示例,并利用AUC指标衡量模型.画出ROC曲线. 逻辑回归用于拟合二元分类响应变量的统计模型.衡量逻辑回归模型拟合数据集情况,通常使用两个指标: 敏感性 模型预测阳性结果并且 ...

  8. 使用鸢尾花数据集实现一元逻辑回归、多分类问题

    目录 鸢尾花数据集 逻辑回归原理 [1]从线性回归到广义线性回归 [2]逻辑回归 [3]损失函数 [4]总结 TensorFlow实现一元逻辑回归 多分类问题原理 独热编码 多分类的模型参数 损失函数 ...

  9. 用逻辑回归实现鸢尾花数据集分类(1)

    鸢尾花数据集的分类问题指导 -- 对数几率回归(逻辑回归)问题研究 (1) 这一篇Notebook是应用对数几率回归(Logit Regression)对鸢尾花数据集进行品种分类的.首先会带大家探索一 ...

最新文章

  1. Css实现的图片灰度
  2. Linux下c和cuda混合编译,并生成动态链接库.so和使用
  3. First Post
  4. c语言数组求逆序对,LeetCode 面试题51. 数组中的逆序对
  5. (2021年)IT技术分享社区个人文章汇总(电脑技巧篇)
  6. Java的反射API
  7. SpringBoot简要
  8. weblogic启动项目报错找不到类_启动类报错是经常出现的事但是单一的从一个地方找原因会越找越错...
  9. 怎样用Java 8优雅的开发业务
  10. 华为手机卡在升级界面_你的华为手机变卡了,1分钟调整这3个功能,让手机再战3年...
  11. 你以为用了 BigDecimal 后,计算结果就一定精确了?
  12. JavaEE学习--javascript中的正则表达式
  13. 中央企业经营管理一体化总体框架
  14. 有毒气体传感器代替金丝雀和老鼠在矿山
  15. WPF将点列连接成光滑曲线——贝塞尔曲线
  16. python图像音频处理-通过图像傅里叶变换判断相位和幅度的重要性
  17. 层(Overlays)
  18. GPL amp; LGPL
  19. 基于禁忌搜索算法的TSP问题求解matlab仿真
  20. 书包网小说多线程爬虫

热门文章

  1. 嵌入式设备系统有无操作系统的区别
  2. 使用PuTTY上传和下载文件
  3. 【CodeForces 574B】Bear and Three Musketeers
  4. 大数据-HADOOP高可用、联邦机制- 学习笔记 -BH4
  5. 北京峰会系列二|基于SPDK的UDisk全栈优化
  6. 设置短域名跳转目标网址,长链接缩短的方法
  7. 简单的汉字加密-java
  8. python模拟登陆抖音_抖音模拟登陆的实现
  9. 自己搭建的k8s集群,怎么做负载均衡?
  10. Python之PIL图片操作