加载数据

import numpy as np
import pandas as pddata = pd.read_csv('iris.csv')
# 去掉不需要的ID列
data.drop('ID',axis=1,inplace=True)
# 删除重复记录
data.drop_duplicates(inplace=True)
##  进行映射
de = data['Species'].drop_duplicates()# print(de)
# setosa virginica  versicolordata['Species'] = data['Species'].map({'setosa':0,'versicolor':1,'virginica':2})# 只选取类别为0 1 的莺尾花数据  进行逻辑回归的二分类
data = data[data['Species'] != 2]
# print(len(data))

逻辑回归类

class LogisticRegression:# 实现逻辑回归def __init__(self,alpha,times):#  初始化方法#  参数: alpha :float 学习率#  times : int 迭代次数self.alpha = alphaself.times = timesdef sigmoid(self,z):# sigmoid函数的实现# 参数: x : float 自变量 值为x = w.T * x# return  p (概率0-1): 返回样本属于类别1的概率值,用来作为结果的预测# 当x>= 0.5 (Z>=0)时   判定为类别1  否则判定为类别0return 1.0 / (1.0 + np.exp(-z))def fit(self,X,y):# 根据提供的训练数据 对模型进行训练# 参数 : X : 类数组类型 形状[样本数量,特征数量] 待训练的样本特征属性# y : 类数组类型 形状为:[样本数量] 每个样本的目标值 (标签)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])# 计算概率值(结果判定为1)p = self.sigmoid(z)# 根据逻辑回归的代价函数(目标函数)J(W)=-sum(yi * log(s(zi)) + (1-yi) * log(1-s(zi)))cost = -np.sum(y * np.log(p) + (1-y) * np.log(1-p))self.loss_.append(cost)# 调整权重值 : 根据公式 : 权重(j列) = 权重(j列)+ 学习率*sum(y-s(z))*x(j))self.w_[0] += self.alpha * np.sum(y-p)self.w_[1:] += self.alpha * np.dot(X.T,y-p)def predict_proba(self,X):# 根据参数传递的样本,对样本数据进行预测# 参数 : X : 类数组类型 形状[样本数量,特征数量] 待训练的样本特征属性# return : 数组类型 预测结果(概率值)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):# 根据参数传递样本  对样本数据进行预测# 参数 X: 类数组类型 形状[样本数量,特征数量] 待训练的样本特征属性
#         # return : 数组类型 预测结果(分类值)return np.argmax(self.predict_proba(X),axis=1)

数据训练和测试

t1 = data[data['Species'] == 0]
t2 = data[data['Species'] == 1]t1 = t1.sample(len(t1),random_state=0)
t2 = t2.sample(len(t2),random_state=0)train_X = pd.concat([t1.iloc[:40,:-1],t2.iloc[:40,:-1]],axis =0 )
train_y = pd.concat([t1.iloc[:40,-1],t2.iloc[:40,-1]],axis =0 )
test_X = pd.concat([t1.iloc[40:,:-1],t2.iloc[40:,:-1]],axis =0 )
test_y = pd.concat([t1.iloc[40:,-1],t2.iloc[40:,-1]],axis =0 )# 莺尾花的特征列 数以一个数量级 可以不用标准化处理
lr = LogisticRegression(alpha=0.01,times=20)
lr.fit(train_X,train_y)
# 预测的概率值
# print(lr.predict_proba(test_X))
# 预测的分类值
# print()
# 计算准确性
result = lr.predict_proba(test_X)
# print(np.sum(result == test_y))
print(np.sum((result == test_y)/len(test_y)))

可视化

#    可视化
import matplotlib as mpl
import matplotlib.pyplot as plt# 设置中文显示
mpl.rcParams['font.family'] = "SimHei"
# 设置负号显示
mpl.rcParams['axes.unicode_minus'] = False# 绘制预测值
plt.plot(result,'ro',ms=15,label='预测值')
# 绘制真实值
plt.plot(test_y.values,'go',ms=5,label='真实值')plt.title("逻辑回归")
plt.xlabel("样本序号")
plt.ylabel('类别')
plt.legend()
plt.show()# 绘制目标函数损失值
plt.plot(range(1,lr.times+1),lr.loss_,'go-')
plt.show()

机器学习系列(五) -- 逻辑回归(莺尾花数据集)相关推荐

  1. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  2. 【机器学习算法笔记系列】逻辑回归(LR)算法详解和实战

    逻辑回归(LR)算法概述 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 逻辑 ...

  3. 莺尾花数据集--kNN分类

    Step1: 库函数导入 import numpy as np # 加载莺尾花数据集 from sklearn import datasets # 导入KNN分类器 from sklearn.neig ...

  4. 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)

    文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...

  5. k-近邻(应用sklearn的莺尾花数据集)

    kNN 的作用机制为 在目标周围选取最近k个点,这k个点哪种占比最大,就可以把这个目标分类到那个分类,即有分到相似属性多的类别.  该算法和回归,决策树不同之处是,回归和决策树是通过训练集确定参数,参 ...

  6. SVM训练莺尾花数据集

    SVM训练莺尾花数据集 代码在莺尾花数据集上训练SVM,数据集由莺尾花的测量值及其相应的物种标签组成.该模型使用70%数据用于训练,然后剩余部分进行测试.其中′fit′'fit'′fit′方法在训练集 ...

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

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

  8. ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测daiding

    ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 目录 基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 设计思路 ...

  9. DL之PerceptronAdalineGD:基于iris莺尾花数据集利用Perceptron感知机和AdalineGD算法实现二分类

    DL之Perceptron&AdalineGD:基于iris莺尾花数据集利用Perceptron感知机和AdalineGD算法实现二分类 目录 基于iris莺尾花数据集利用Perceptron ...

  10. ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测

    ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 目录 基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 设计思路 ...

最新文章

  1. PCB设计必知:布局及设计规范
  2. 玩转GIT系列之【如何恢复windows系统下git的状态图标显示】
  3. AT3950-[AGC022E]Median Replace【贪心,dp】
  4. 产品经理与项目经理的区别
  5. ubuntu18.04管理redis
  6. it有啥好咨询的_小经验 | 埃森哲Accenture管理咨询+IT咨询实习
  7. UVA10878 Decode the tape【编码】
  8. jquery的DOM节点操作(创建和插入元素节点)
  9. 用函数指针控制排序的顺序
  10. HTTPModules与HTTPHandler
  11. 如何爬取中国近十年的GDP,并写入csv文件?
  12. 虚拟化服务器安装方法,Citrix Xenserver:7.0虚拟化服务器安装详细图文教程
  13. 关于永恒之蓝MS17-010的描述影响范围及修复方案
  14. SpringCloudAlibaba——Nacos实现原理详解
  15. php guzzle,在PHP中实现使用Guzzle执行POST和GET请求
  16. 计算机内存错误 要降频,windows10系统出现内存自动降频的解决方法
  17. 社保缴费满15年就可以不缴了?6个很多人最关心的问题权威解答来了
  18. openwrt时间自动同步
  19. Excel计算将时间字符串转换为时间格式 年-月-日 时:分:秒 且计算时间差得到 时分秒 格式
  20. v-for与v-if为什么不能同时用?

热门文章

  1. Linux系统下强制关闭程序
  2. 【PTA-python】第7章-1 词频统计 (30 分)--sys.stdin.read()读入到特定字符截至,双重排序条件key=lambda item:(-item[1], item[0])
  3. 《Arduino与LabVIEW开发实战》第3章 如何连接Arduino与LabVIEW
  4. 学习笔记之Vue基础学习(一)
  5. 基于javaweb的大学生兼职系统(java+springboot+jsp+mysql)
  6. 通用汽车将向底特律郊区一家工厂投资3亿美元
  7. hadoop面试题 5 ---有用
  8. 第六章、Hash函数
  9. java去掉html中的图片,java去掉html标签工具
  10. 禾穗HERS | 不结婚就不孝?催婚季必备三招快学起来!