3-2 特征二值化

2023-11-10

特征二值化

请参考《数据准备和特征工程》中的相关章节,调试如下代码。


基础知识

import pandas as pd

pm25 = pd.read_csv("/home/aistudio/data/data20505/pm2.csv")
pm25.head()
RANK CITY_ID CITY_NAME Exposed days
0 1 594 拉萨 2
1 2 579 玉溪 7
2 3 263 厦门 8
3 4 267 泉州 9
4 5 271 漳州 10
import numpy as np

# 以平均值作为阈值对特征"Exposed days"进行二值化
pm25['bdays'] = np.where(pm25["Exposed days"] > pm25["Exposed days"].mean(), 1, 0)
pm25.sample(10)
RANK CITY_ID CITY_NAME Exposed days bdays
174 197 598 宝鸡 128 1
260 283 364 安阳 246 1
137 152 183 南通 103 0
249 272 358 开封 210 1
54 62 44 朔州 58 0
217 240 315 东营 170 1
86 96 86 抚顺 78 0
77 86 303 上饶 71 0
190 213 608 商洛 138 1
180 203 438 岳阳 132 1
from sklearn.preprocessing import Binarizer

# 创建二值化模型,并用平均值赋值
bn = Binarizer(threshold=pm25["Exposed days"].mean())   

# 用得到的模型进行训练并同时实现特征转换,pm25[["Exposed days"]将Series转换为DataFrame对象
print(type(pm25["Exposed days"]))
result = bn.fit_transform(pm25[["Exposed days"]])   

pm25['sk-bdays'] = result
pm25.sample(10)
RANK CITY_ID CITY_NAME Exposed days bdays sk-bdays
92 103 147 双鸭山 82 0 0
12 13 273 南平 18 0 0
175 198 545 遂宁 129 1 1
157 179 449 怀化 119 1 1
67 75 507 钦州 65 0 0
40 45 88 丹东 49 0 0
41 46 462 珠海 49 0 0
121 133 230 衢州 94 0 0
70 78 510 玉林 67 0 0
176 199 199 泰州 130 1 1
pm25[["Exposed days"]].shape
(264, 1)
pm25["Exposed days"].shape
(264,)
pm25["Exposed days"].values.reshape((-1, 1)).shape
(264, 1)
from sklearn.preprocessing import binarize

# 训练出的模型fbin可以对其他DataFrame对象进行二值化操作
fbin = binarize(pm25[['Exposed days']], threshold=pm25['Exposed days'].mean())

fbin[[1, 50, 100, 150, 200]]
array([[0],
       [0],
       [0],
       [1],
       [1]])
# scale(float):正态分布的标准差,越大曲线越矮胖
gau = np.random.normal(loc=0, scale=1.0, size=100)
gau
array([-0.16138569, -1.12381876,  1.08345071, -0.3374515 , -0.4377176 ,
       -0.18485122, -0.47717794, -0.15147513,  1.34975203, -0.06388386,
        1.2794776 , -0.67413457, -2.03388881,  1.77891998,  3.45445178,
       -0.93258988,  0.39723041, -1.23677885,  1.87841988, -0.48846415,
        0.23898558,  0.08322678,  0.50841094, -0.59189042, -0.86218771,
        0.13808454, -1.420791  , -0.52815037,  0.37716549,  0.55944191,
       -0.81171679,  0.26489442, -0.62432789, -0.43654577,  0.226915  ,
       -1.01346821, -1.42727242, -0.45127134, -0.18215018,  1.11537106,
        0.30099939, -1.2661621 , -0.11895918,  1.69860201, -0.67702066,
       -1.00599679, -0.69448062, -0.94056253, -0.25849202, -0.08299086,
        1.48469908, -1.19206442,  0.95998195, -1.800488  , -0.04798554,
       -0.77909029,  0.9659936 , -0.38096705,  1.52306246, -2.033555  ,
       -1.82498521, -0.4745455 , -0.20866822,  2.01935722,  0.46819346,
        0.37152816, -0.20247084, -1.14168624,  1.04413851,  0.98376221,
        0.27129983, -0.66495964, -0.99604697,  0.31477433,  1.14606679,
        0.92117707,  0.91663896,  0.96625631, -2.00554469,  1.02536304,
       -0.63002324,  1.71252177, -0.65706596, -1.33159033,  0.08011075,
        1.62804803, -1.63617324,  1.42729399, -2.14112983,  0.95559999,
       -0.74515346,  1.29242505,  0.03208948, -0.45625835,  1.24445081,
       -1.53939509,  0.40075234, -0.97061926,  0.39624106, -0.14267309])
# Binarizer()的参数默认为0,reshape(-1, 1)中-1表示按照行的方式的获取,结果形成一列
gau_bin = Binarizer().fit_transform(gau.reshape(-1, 1))   
gau_bin.reshape(1,-1) [0]
array([0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 1., 1., 0., 1.,
       0., 1., 0., 1., 1., 1., 0., 0., 1., 0., 0., 1., 1., 0., 1., 0., 0.,
       1., 0., 0., 0., 0., 1., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1.,
       0., 1., 0., 0., 0., 1., 0., 1., 0., 0., 0., 0., 1., 1., 1., 0., 0.,
       1., 1., 1., 0., 0., 1., 1., 1., 1., 1., 0., 1., 0., 1., 0., 0., 1.,
       1., 0., 1., 0., 1., 0., 1., 1., 0., 1., 0., 1., 0., 1., 0.])

项目案例

%matplotlib inline
import matplotlib.pyplot as plt
import cv2

# 写一个专门在Jupyter中显示图片的函数
def show_img(img):    
    if len(img.shape) == 3:

        # 分离得到各个通道的灰度值(单通道图像)
        b, g, r = cv2.split(img)

        # 合并单通道成多通道(不能合并多个多通道图像)。   
        img = cv2.merge([r, g, b])
        plt.imshow(img)
    else:
        plt.imshow(img, cmap="gray")
    plt.axis("off")
    plt.show()

laoqi = cv2.imread("work/images/laoqi.png")
show_img(laoqi)

在这里插入图片描述

# BGR转GRAY
gray_laoqi = cv2.cvtColor(laoqi, cv2.COLOR_BGR2GRAY)
show_img(gray_laoqi)

在这里插入图片描述

# cv2.threshold(img, threshold, maxval,type)
# threshold是设定的阈值127
# maxval是当灰度值大于(或小于)阈值127时将该灰度值赋成的值255
# type规定的是当前二值化的方式  ,cv2.THRESH_BINARY:大于阈值127的部分被置为255,小于部分被置为0    
ret,thr = cv2.threshold(gray_laoqi, 127, 255, cv2.THRESH_BINARY)
show_img(thr)

在这里插入图片描述

动手练习

pd.read_csv("/home/aistudio/data/data20512/marathon.csv").head()
age gender split final
0 33 M 01:05:38 02:08:51
1 32 M 01:06:26 02:09:28
2 31 M 01:06:49 02:10:42
3 38 M 01:06:16 02:13:45
4 31 M 01:06:32 02:13:59
import datetime

# 将时间换算为datetime.timedelta类型,split代表半马用时
def convert_time(s):
    h,m,s = map(int, s.split(":"))
    return datetime.timedelta(hours=h, minutes=m, seconds=s)

marathon = pd.read_csv("/home/aistudio/data/data20512/marathon.csv",
                      converters={"split":convert_time, 
                                  "final":convert_time})
print(marathon.dtypes)
marathon.head()
age                 int64
gender             object
split     timedelta64[ns]
final     timedelta64[ns]
dtype: object
age gender split final
0 33 M 0 days 01:05:38 0 days 02:08:51
1 32 M 0 days 01:06:26 0 days 02:09:28
2 31 M 0 days 01:06:49 0 days 02:10:42
3 38 M 0 days 01:06:16 0 days 02:13:45
4 31 M 0 days 01:06:32 0 days 02:13:59
# 由于转换为int后的存储单位是纳秒,因此需要乘以1e-9
marathon['split'] = marathon['split'].astype(int) * 1e-9
marathon['final'] = marathon['final'].astype(int) * 1e-9

marathon.head()
age gender split final
0 33 M 3938.0 0.000008
1 32 M 3986.0 0.000008
2 31 M 4009.0 0.000008
3 38 M 3976.0 0.000008
4 31 M 3992.0 0.000008
marathon['frac'] = 1 - 2 * marathon['split'] / marathon["final"]
marathon.head()
age gender split final frac
0 33 M 3938.0 7731.0 -0.018756
1 32 M 3986.0 7768.0 -0.026262
2 31 M 4009.0 7842.0 -0.022443
3 38 M 3976.0 8025.0 0.009097
4 31 M 3992.0 8039.0 0.006842
marathon['split_frac'] = np.where(marathon['frac']>0, 0, 1)
marathon.sample(10)
age gender split final frac split_frac
10199 43 M 6524.0 14839.0 0.120695 0
9853 36 W 6906.0 14724.0 0.061940 0
1385 39 M 5304.0 11185.0 0.051587 0
2923 51 M 5957.0 12162.0 0.020391 0
35513 42 M 9818.0 24291.0 0.191635 0
2812 32 M 5390.0 12090.0 0.108354 0
21482 60 M 7353.0 17853.0 0.176273 0
31825 59 M 8110.0 21184.0 0.234328 0
25189 38 W 7816.0 18852.0 0.170804 0
15959 22 W 7438.0 16395.0 0.092650 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3-2 特征二值化 的相关文章

随机推荐

  • 使用Hibernate连接MySQL数据库,MySQL连接超时断开的问题

    最近让人头疼的一个问题 就是服务器在不确定的时点会出现关于数据库连接的Exception 大致的Exception如下 org hibernate util JDBCExceptionReporter SQL Error 0 SQLStat
  • texstudio配置编译路径

    texstudio必须配置好编译路径 否则无法编译运行 选项 设置 命令 pdflatex 点击打印符号 找到pdflatex exe打开即可 Xelatex操作步骤相同
  • tomcat替换class文件后重启不生效问题记录

    清空Tomcat work catalina 里面的内容 清空Tomcat temp里面的内容 将Tomcat class文件中 引用 被修改的class 的那几个方法的class 都替换一下 正确操作 但是依然不生效 发现了问题但是不知道
  • 编码:KR字符串匹配,一个简单到领导都看得懂的算法

    常怀感恩 生活或许就不会处处深渊 这几天看了 柔性字符串匹配 觉得很有意思 书是好书 只是这个脑子是不是猪脑就不知道了 于是秉着知之为知之 不知为不知的精神 我准备再次去请教一下我的领导 在一个月黑风高的夜晚 我给领导发了个消息 领导这么回
  • 2023自动化测试需知的4项测试工具!

    一般来说学自动化会建议大家先学selenium 因为最早的时候 自动化就代表selenium 进入测试行业就开始做接口测试 而且现在基本每个公司都需要接口测试 今天就和大家聊一下接口测试的工具 一 Robot Framework 机器人框架
  • Ubuntu添加和设置默认中文字体

    参考 https blog csdn net gengyuchao article details 101215243 首先 通过命令 fc list lang zh 可以查看已安装的中文字体 默认为Ubuntu系统自带的中文字体 安装新字
  • x的n次幂

    题目描述 实现 pow x n 即计算 x 的 n 次幂函数 样例 输入 2 00000 10 输出 1024 00000 说明 100 0 lt x lt 100 0 n 是 32 位有符号整数 其数值范围是 2147483648 214
  • NexT 主题自定义侧边栏图标

    NexT 主题的图标基本上都是由 Font Awesome 提供 但是知乎 CSDN bilibili等大多数国内应用软件的图标在Font Awesome都不支持 为了支持侧边栏各种应用小图标的显示 可以利用嵌入svg格式的图标进行实现 本
  • keil5编译器出现Undefined symbol time (referred from xxx.o).

    我前不久再弄基于stm32控制智能小车电机时 经常出现 error Undefined symbol time referred from xxx o 很烦人 后来我发现了解决办法 在这里我要分享给大家 方法 直接在xxx c文件中给tim
  • Nim游戏详解

    文章目录 废话 正题 证明 举个栗子 拓展题 废话 这是一个过于经典且过于常见的博弈论模型 入门博弈论的话 首先肯定是要知道这个的 正题 N i m Nim Nim 游戏的规则 有 n
  • 数据结构和算法(4)-----栈

    一 栈的一个实际需求 例如 请输入一个表达式计算式 7 2 2 5 1 5 3 3 点击计算 如下图 请问 计算机底层是如何运算得到结果的 注意不是简单的把算式列出运算 因为我们看这个算式 7 2 2 5 但是计算机怎么理解这个算式的 对计
  • 2023“钉耙编程”中国大学生算法设计超级联赛(3)

    Chaos Begin 贪心 凸包 Out of Control DP 递推 Operation Hope 贪心 2 sat与二分 8 bit Zoom 二维前缀 Noblesse Code 轨迹哈希 字典序 差分 Problem 7303
  • 训练集、验证集以及测试集的区别

    1 数据集的划分 训练集 含有参考答案的数据 用来训练模型的已标注数据 用来建立模型 发现规律 验证集 模型训练过程中单独留出的样本集 用于调整模型的超参数和用于对模型的能力进行初步评估 测试集 用来评估模最终模型的泛化能力 但不能作为调参
  • 【cdk的使用】 C语言 零拷贝 链表 队列 栈的使用

    Github地址 https github com wujin1989 cdk cdk的 list 是基于双向循环链表实现 queue 和 stack 基于 list实现 所以cdk用一个双向循环链表实现了三种数据结构 如何使用cdk的链表
  • Python ·保险理赔分析:数据分析

    介绍 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 在本笔记本中 我们将仔细研究保险索赔 并弄清一些有关血压 BMI 糖尿病 吸烟 年龄和性别等条件如何影响索赔价值的事实 我们将使用散点图 饼图 直方图等通过探索性数据分
  • dnn回归预测_Keras之DNN:基于Keras(sigmoid+linear+mse+predict)利用DNN实现回归预测——DIY多分类数据集&预测新数据点...

    Keras之DNN 基于Keras sigmoid linear mse predict 利用DNN实现回归预测 DIY多分类数据集 预测新数据点 目录 输出结果 实现代码 输出结果 实现代码 coding utf 8 Xa Xb for
  • postman 下载图片_postman测试上传图片接口步骤教程

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 前端也要学会使用 只有这样 当接口调试不通的时候 用测试工具 才能够更有底气的甩一张截图给你家的后端 瞧 这是你写的bug 现在来说一下 怎么测试一个上传图片的
  • 工作日志【 SQL内部规范-ETL银行项目 】

    工作日志 SQL内部规范 ETL银行项目 一 表结构设计 建表时 首先要确定表的业务唯一键 即该表的唯一索引由哪些字段构成 不建议创建没有唯一索引的表 如果要修改表的唯一索引 一定要严格评审 前台 表结构变更 F层的表需要通知JAVA开发
  • SpringCloud项目下使用分布式事务seata TCC模式与AT模式例子

    SpringCloud项目下使用分布式事务seata TCC模式与AT模式例子
  • 3-2 特征二值化

    特征二值化 请参考 数据准备和特征工程 中的相关章节 调试如下代码 基础知识 import pandas as pd pm25 pd read csv home aistudio data data20505 pm2 csv pm25 he