二分类实现辨别是否是鸢尾花

尽管名为逻辑回归,但实际上是一个分类模型,尤其是在我们只有两个类时。逻辑回归的名称来源于将输入的任意实值x转换成值在0到1
采用sigmoid,划为[0,1]之间的数据 ,可以解释为概率

为了简单起见,我们将重点关注前两个特征:花萼长度——我们将其称为特征f1,花萼的宽度——我们将其称为特征f2。使用在线性回归中学习的技巧,我们可以把输入x表示成两个特征f1和f2的一个线性组合:
花瓣的长度和宽度、花萼的长度和宽度
x = w1f1 + w2f2

第一步加载数据集

import numpy as np
import matplotlib.pyplot as plt
import cv2
import sklearn
%matplotlib inline
from sklearn import datasets
from sklearn import  linear_model
from sklearn import metrics
plt.style.use('ggplot')iris = sklearn.datasets.load_iris()

iris 数据集分析:
directory
dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息.

dir(iris) dir() # 获得当前模块的属性列表dir()
所有的数据点都包含在’data’中。有150个数据点,每个数据点有4个特征值:

dir(iris),iris.feature_names
(['DESCR','data','feature_names','filename','frame','target','target_names'],['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)'])

iris 数据集的directory:

[‘DESCR’, #description
‘data’, #完整数据
‘feature_names’, #特征的名字
‘filename’, #文件的所在地
‘frame’, #空值
‘target’, #label ,标签 ,(150,) [0,1,2] 三分类
‘target_names’] # array([‘setosa’, ‘versicolor’, ‘virginica’]

feature_names:
[‘sepal length (cm)’,
‘sepal width (cm)’,0
‘petal length (cm)’,
‘petal width (cm)’])
花瓣的长度和宽度、花萼的长度和宽度

np.unique(iris.target) #读取非重复元素  array([0, 1, 2])
array([0, 1, 2])

由于其内由三个数据为了让其 成为一个二分类的问题,
子轩需要将一些数据丢弃掉啊-_-!!

idx = iris.target !=2 #此时 数据中只留下了 bool类型
data = iris.data[idx].astype(np.float32) #传入bool类型,统计学习方法,筛选数据,还可以使用 x  for x in Y if x<2 ?
target1 = list(filter(lambda x: x < 2,iris.target))
target = iris.target[idx].astype(np.float32)
target1 = np.array(target1)
np.unique(target1)
array([0, 1])

#生成器和迭代器
dict_list = {}
list0 = [x for x in range(5) if x]
list1 = [x for x in range(5,10)]

lambda高阶用法
fun1 = lambda x: x ** 2
iterable = filter(lambda x: x % 2, range(1, 10))
items1 = list(map(fun, iterable))
items2 = [x ** 2 for x in range(1, 10) if x % 2]

func = lambda x,y: x*10+y
func(1,2)

filter()
filter(fun,sequence)

is_odd = lambda x : x%2 == 1
newList = filter(is_odd,[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
序列的每个元素作为参数传递给函数进行判断,
然后返回 True 或 False,最后将返回 True 的元素放到新列表中

map()
map(fun,sequence)
function – 函数
iterable – 一个或多个序列
第一个参数 function 以参数序列中的每一个元素调用 function 函数,
返回包含每次 function 函数返回值的新列表,返回迭代器
map(lambda x:x**2, [1,2,3,4,5])

map()和filter()都是对调用他们的数组进行遍历

参数上map函数与filter是一样的,他们的差别就是函数是对每个元素做一个数学上的代换,而非条件的判断

'''搞懂三个函数  map, lambda, filter'''
ls = [1,2,3,4,5]
map1 = list(map(lambda x:x**2,ls ))
filter1 = list(filter(lambda x: x<3,ls) )#迭代对象 ,可以进行迭代,也可以实例化
filter1
[1, 2]
map2 = np.array(ls)<3
map2
array([ True,  True, False, False, False])

创建散点图,plt.scatter() ,检查数据,
x,y
c对应颜色指示值,也就是如果采用了渐变色的话,我们设置c=x就能使得点的颜色根据点的x值变化
cmap调整渐变色或者颜色列表的种类
s控制点大小

plt.scatter(data[:,0],data[:,1],c =target,cmap='Paired',s = 100)
<matplotlib.collections.PathCollection at 0x2183ac15048>

数据集拆分

xTrain,xTest,yTrain,yTest = sklearn.model_selection.train_test_split(data,target,test_size=0.2,random_state=42) #返回ndarray 类型
xTrain.shape #(90, 4)
(80, 4)
'''sklearn 的分类器'''lr = sklearn.linear_model.LinearRegression()lr.fit(xTrain,yTrain)
yPre = lr.predict(xTest) #概率值
yPre = np.around(yPre,0).astype(int) #  概率值转变为预测的结果plt.figure(figsize=(10,6))
plt.scatter(range(yTest.size),yTest,c='g')
plt.text(0,1.2,f'accuracy_score = {metrics.accuracy_score(yTest,yPre)}')
plt.scatter(range(yTest.size),yPre,c = 'r')
<matplotlib.collections.PathCollection at 0x2183ac6af28>

'''cv2 的分类器'''
#   创建一个分类器的对象
logistRegression = cv2.ml.LogisticRegression_create()
# 指定一个训练方法
# cv2.ml.LogisticRegression_BATCH
# cv2.ml.LogisticRegression_MINI_BATH
logistRegression.setTrainMethod(cv2.ml.LOGISTIC_REGRESSION_MINI_BATCH)
logistRegression.setMiniBatchSize(1)
# 指定算法的迭代次数
logistRegression.setIterations(100)
#  训练模型
logistRegression.train(xTrain,cv2.ml.ROW_SAMPLE,yTrain)
#训练阶段的目标是找到一组最佳权重,将特征值转换为一个输出标签。单个数据点由它的4个特征值(f0、f1、f2和f3)给出
True

因为我们有4个特征,所以我们还应该有4个权重,使得x = w0f0 + w1f1 + w2f2 + w3f3,而且ŷ = σ(x)。但是,如前所述,该算法增加了一个额外的权重,它作为偏移量或偏置,使得x = w0f0 + w1f1 + w2f2 + w3f3 + w4

就意味着逻辑函数的输入是x = –0.0409f0 – 0.0191f1 – 0.163f2 + 0.287f3 + 0.119(偏置)

'''评估分类器的效果'''
ret,y_pred = logistRegression.predict(xTest) # 返回一个tuple,2维
plt.figure(figsize=(10,6))
plt.scatter(range(yTest.size),yTest,c='g')
plt.text(0,0.9,f'accuracy_score = {metrics.accuracy_score(yTest,y_pred)}')
plt.scatter(range(yTest.size),y_pred,c = 'r')
plt.savefig('figures/iris_classification.png')

基于逻辑回归的鸢尾花分类相关推荐

  1. 基于逻辑回归的鸢尾花分类预测

    基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 1.2 逻辑回归的应用 2 学习目标 3 代码流程 4 算法实战 4.1 Demo实践 Step1:库函数导入 Step2:模 ...

  2. 基于逻辑回归的癌症分类预测-良/恶性乳腺癌肿瘤预测

    简介:逻辑回归是属于机器学习里面的监督学习,它是以回归的思想来解决分类问题的一种非常经典的二分类分类器. 流程分析: 获取数据 数据处理模块(处理缺失值) 数据集划分 特征工程(标准化) 逻辑回归预估 ...

  3. 基于逻辑回归的癌症分类预测-良/恶性乳腺癌肿瘤预测及ROC曲线绘制

    逻辑回归 逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归.由于算法的简单和高效,在实际中应用非常广泛.逻辑回归是解决二分类问题 ...

  4. Machine Learning | 基于逻辑回归做二分类进行癌症预测

    导入包 import pandas as pd import numpy as np from sklearn.datasets import load_boston from sklearn.lin ...

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

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

  6. 机器学习算法(一): 基于逻辑回归的分类预测-Task01

    基于逻辑回归LR的分类预测 1.逻辑回归的介绍 Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类.Logistic Regression 因其简单.可并行化 ...

  7. 课堂笔记:逻辑回归和鸢尾花数据集

    一.机器学习 机器学习过程: 二.逻辑回归 1.作用:(1)估计某事物的可能性 :(2)适用于流行病学资料的危险因素分析. 2.介绍:简单来说它是线性回归的一种,事实上它是一个被logistic方程归 ...

  8. 机器学习笔记-基于逻辑回归的分类预测

    天池学习笔记:AI训练营机器学习-阿里云天池 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有&quo ...

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

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

最新文章

  1. groupby elasticsearch
  2. Spring-基于注解的配置[01定义Bean+扫描Bean]
  3. 接口java_JAVA 初识接口
  4. JavaSE(二十二)——TCP协议的三次握手
  5. wxWidgets:wxConfig 概述
  6. ITK:基于零交叉的边缘检测器
  7. oracle连续周数,详细讲解Oracle数据库的“周数计算”
  8. mysql 字符集 校验规则_MySQL字符集及校验规则
  9. 河南科技大学计算机信息安全技术考试,关于申报2020年信息安全等级保护项目的通知...
  10. 使用xshell6连接linux提示 WARNING! The remote SSH server rejected X11 forwarding
  11. 微软开放技术热烈祝贺开源社成立!
  12. python 制作标签云
  13. MAE平均绝对误差和MSE均方误差
  14. Elasticsearch:Elasticsearch 开发入门 - Golang
  15. TweenMax特效
  16. Fortran NINT函数意思
  17. 打开secpol.msc、gpedit.msc显示“试图引用不存在的令牌”,复制到其他目录可正常打开
  18. 苹果操作系统 leopard 10.5 (PC破解完全中文安装版,IBM X40安装成功)
  19. 工厂仪表定时拍照智能AI算法识别内网部署方案
  20. 一个流和百亿级的表的join

热门文章

  1. 【Cplex】IBM ILOG Concert: Impossible to create an instance of Excel.
  2. 【JZOJ6150】爱乐之城
  3. WIN7开启远程桌面服务
  4. 纯文本抽出程序库DMC TEXT FILTER
  5. 巴西龟饲养日志-----饲料的选择
  6. matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab
  7. JavaWeb进阶之路:MyBatis初体验
  8. xshell 6查看测试日志
  9. 使用计算机处理数据第一步,2012年考研专业课自测试题及答案:计算机
  10. 我 stormzhang 来报道了!