机器学习测试笔记(25)——数据表达(上)

简介: 机器学习测试笔记(25)——数据表达(上)

1 哑变量


哑变量:利用类似pd.get_dummies得到的0,1数据


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.preprocessing import OneHotEncoder#独热编码,同pd.get_dummies,但仅能用于整型变量
def base_for_dummies():
  colour = pd.DataFrame({'数据特征':[1,2,3,4,5,6,7],'颜色类型':['赤','橙','黄','绿','青','蓝','紫']})
  print(colour)


输出

      数据特征颜色类型

0     1       

1     2       

2     3       

3     4        绿

4     5       

5     6       

6     7       

        colour_dum = pd.get_dummies(colour)

        print(colour_dum)


输出


数据特征        

颜色类型_  

颜色类型_

颜色类型_绿

颜色类型_

颜色类型_

颜色类型_

颜色类型_

0

1

0

0

0

0

1

0

0

1

2

1

0

0

0

0

0

0

2

3

0

0

0

0

0

0

1

3

4

0

0

1

0

0

0

0

4

5

0

0

0

0

0

1

0

5

6

0

0

0

1

0

0

0

6

7

0

1

0

0

0

0

0


colour['数据特征'] = colour['数据特征'].astype(str)
        colour_dum = pd.get_dummies(colour,columns=['数据特征'])
print(colour_dum)


输出



颜色类型    

数据特征_1

数据特征_2

数据特征_3

数据特征_4

数据特征_5

数据特征_6

数据特征_7

0

1

0

0

0

0

0

0

1

0

1

0

0

0

0

0

2

0

0

1

0

0

0

0

3

绿

0

0

0

1

0

0

0

4

0

0

0

0

1

0

0

5

0

0

0

0

0

1

0

6

0

0

0

0

0

0

1


2 装箱处理

#生成随机数列
rnd =np.random.RandomState(56)
x =rnd.uniform(-5,5,size=50)
        #向数据添加噪音
y_no_noise =(np.cos(6*x)+x)
X = x.reshape(-1,1)
y = (y_no_noise +rnd.normal(size=len(x)))/2
plt.plot(X,y,'o',c='g')
plt.show()

image.png


MLPRegressorKNeighborsRegressor进行拟合。


line = np.linspace(-5,5,1000,endpoint=False).reshape(-1,1)
mlpr =MLPRegressor().fit(X,y)
knr =KNeighborsRegressor().fit(X,y)
plt.plot(line,mlpr.predict(line),label='MLP')
plt.plot(line,knr.predict(line),label='KNN')
plt.plot(X,y,'o',c='g')
plt.legend(loc='best')
plt.show()

image.png


MLPRegressorKNeighborsRegressor拟合线是不一致的,下面我们通过装箱处理来逐步把二者变为一致。(digitize离散化处理,又称装箱处理)


#设置11个箱子
bins = np.linspace(-5,5,11)
#将数据装箱
target_bin =np.digitize(X, bins=bins)
print("装箱数据范围:\n{}".format(bins))
print("前10个数据点的特征值:\n{}".format(X[:10]))
print("前10个数据点所在的箱子:\n{}".format(target_bin[:10]))


输出

装箱数据范围:
[-5. -4. -3. -2. -1.  0.  1. 2.  3.  4.  5.]
前10个数据点的特征值:
[[ 4.84191851]
 [-1.66587734]
 [ 1.73701625]
 [-3.03609583]
 [-1.45553535]
 [ 3.13365953]
 [-2.52150446]
 [-0.41388675]
 [ 3.77301421]
 [-1.08341539]]
前10个数据点所在的箱子:
[[10]
 [ 4]
 [ 7]
 [ 2]
 [ 4]
 [ 9]
 [ 3]
 [ 5]
 [ 9]
 [ 4]]


分为了[-5,-4],[-4,-3],[-3,-2],[-2,-1],[-1,0],[0,1],[1,2],[2,3],[3,4],[4,5]10个箱子,如果数字在-5 ~ -4之间,放在第1个箱子;如果数字在-4 ~ -3之间,放在第2个箱子;;如果数字在4 ~ 5之间,放在第10个箱子,所以第一数字为4.84191851,放在了第10个箱子;所以第一数字为-1.66587734,放在了第4个箱子


一般在机器学习中很少用get_dummies,经常使用OneHotEncoder独热编码,它与get_dummies类似产生哑变量,但是它仅适用于整数。


onehot = OneHotEncoder(sparse = False)
onehot.fit(target_bin)
#将独热编码转为数据
X_in_bin =onehot.transform(target_bin)
print("装箱后的数据形态:\n{}".format(X_in_bin.shape))
print("装箱后的前10个数据点:\n{}".format(X_in_bin[:10]))


输出

装箱后的数据形态:
(50, 10)
装箱后的前10个数据点:
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0.0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0.0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0.0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0.0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 1.0.]
 [0. 0. 1. 0. 0. 0. 0. 0. 0.0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0.0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 1.0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]]


仍旧50个变量,但是由于装进了10个箱子,特征数变为了10。下面我们再用装箱后的数据,独热编码进行MLPRegressorKNeighborsRegressor拟合。


#使用独热编码进行数据表达
onehot_line =onehot.transform(np.digitize(line,bins=bins))
onehot_mlpr =MLPRegressor().fit(X_in_bin,y)
onehot_knr =KNeighborsRegressor().fit(X_in_bin,y)
plt.plot(line,onehot_mlpr.predict(onehot_line),label='New MLP')
plt.plot(line,onehot_knr.predict(onehot_line),label='NewKNN')
plt.plot(X,y,'o',c='g')
plt.legend(loc='best')
plt.show()

image.png


MLPKNN拟合曲线保持一致,但是在每个箱子里面均为横直线,即斜率为0的直线。为了使斜率不为0,我们要进行数据升维。


注意:对于样本数据进行装箱处理,对于决策树为基础的算法,比如随机森林、梯度上升决策树、决策树是没有效果的。


目录
相关文章
|
2天前
|
机器学习/深度学习 数据采集 数据处理
谷歌提出视觉记忆方法,让大模型训练数据更灵活
谷歌研究人员提出了一种名为“视觉记忆”的方法,结合了深度神经网络的表示能力和数据库的灵活性。该方法将图像分类任务分为图像相似性和搜索两部分,支持灵活添加和删除数据、可解释的决策机制以及大规模数据处理能力。实验结果显示,该方法在多个数据集上取得了优异的性能,如在ImageNet上实现88.5%的top-1准确率。尽管有依赖预训练模型等限制,但视觉记忆为深度学习提供了新的思路。
9 2
|
28天前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
256 2
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
28天前
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
79 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
|
28天前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
46 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
24天前
|
机器学习/深度学习 存储 人工智能
揭秘机器学习背后的神秘力量:如何高效收集数据,让AI更懂你?
【10月更文挑战第12天】在数据驱动的时代,机器学习广泛应用,从智能推荐到自动驾驶。本文以电商平台个性化推荐系统为例,探讨数据收集方法,包括明确数据需求、选择数据来源、编写代码自动化收集、数据清洗与预处理及特征工程,最终完成数据的训练集和测试集划分,为模型训练奠定基础。
37 3
|
24天前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
24天前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
|
25天前
|
机器学习/深度学习 算法 Python
“探秘机器学习的幕后英雄:梯度下降——如何在数据的海洋中寻找那枚失落的钥匙?”
【10月更文挑战第11天】梯度下降是机器学习和深度学习中的核心优化算法,用于最小化损失函数,找到最优参数。通过计算损失函数的梯度,算法沿着负梯度方向更新参数,逐步逼近最小值。常见的变种包括批量梯度下降、随机梯度下降和小批量梯度下降,各有优缺点。示例代码展示了如何用Python和NumPy实现简单的线性回归模型训练。掌握梯度下降有助于深入理解模型优化机制。
27 2
|
28天前
|
计算机视觉
目标检测笔记(二):测试YOLOv5各模块的推理速度
这篇文章是关于如何测试YOLOv5中不同模块(如SPP和SPPF)的推理速度,并通过代码示例展示了如何进行性能分析。
73 3
|
28天前
|
人工智能 算法 测试技术
自动化测试项目实战笔记(二):解决验证码识别问题
这篇文章介绍了三种自动化测试中验证码识别的方法:使用Python的pytesseract和PIL模块、利用第三方API如万维易源,以及使用开源的ddddocr库,还提到了一些注意事项,比如如何获取验证码区域的截图。
64 2

热门文章

最新文章

下一篇
无影云桌面