机器学习测试笔记(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,我们要进行数据升维。


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


目录
相关文章
|
5天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
27 11
|
7天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
37 10
|
2月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
38 6
|
2月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
31 1
|
2月前
|
机器学习/深度学习 数据采集 人工智能
自动化测试的未来:AI与机器学习的融合之路
【10月更文挑战第41天】随着技术的快速发展,软件测试领域正经历一场由人工智能和机器学习驱动的革命。本文将探讨这一趋势如何改变测试流程、提高测试效率以及未来可能带来的挑战和机遇。我们将通过具体案例分析,揭示AI和ML在自动化测试中的应用现状及其潜力。
50 0
|
3月前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
40 1
|
3月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
145 1
|
8月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
257 14
|
8月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
143 1
|
8月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)