快速入门Python机器学习(35)(上)

简介: 快速入门Python机器学习(35)(上)

14.2数据表达与特征工程


14.2.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


14.2.2 OneHotEncoder类


class sklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse=True, dtype=, handle_unknown='error')


将分类特征编码为独热的数字数组。

这个转换器的输入应该是一个类似整数或字符串的数组,表示由分类(离散)特征获取的值。这些特征使用one-hot(也称为'one-of-K'或'dummy')编码方案进行编码。这将为每个类别创建一个二进制列,并返回稀疏矩阵或密集数组(取决于稀疏参数)

默认情况下,编码器根据每个特征中的唯一值导出类别。或者,也可以手动指定类别。

这种编码是为许多scikit学习估计器提供分类数据所必需的,特别是线性模型和具有标准核的支持向量机。

注意:y标签的独热编码应该改用LabelBinarizer。


参数

参数

类型

解释

categories_

list of arrays


拟合过程中确定的每个特征的类别(按X中特征的顺序排列,并与变换的输出相对应)。这包括drop中指定的类别(如果有)。

drop_idx_

array of shape (n_features,)

drop_idx_[i] :是要为每个功能删除的类别的categories_[i]中的索引。

drop_idx_[i]=None:如果不从索引为i的功能中删除任何类别,例如,当drop='if_binary'且功能不是二进制时。

drop_idx_= None:如果将保留所有变换的特征,请删除。


方法

fit(X[, y])

将独热编码器安装到X

fit_transform(X[, y])

将独热编码器安装到X,然后变换X

get_feature_names([input_features])

返回输出功能的功能名称。

get_params([deep])

获取此估计器的参数。

inverse_transform(X)

将数据转换回原始表示形式。

set_params(**params)

设置此估计器的参数。

transform(X)

使用独热编码转换X


14.2.3装箱处理

#生成随机数列
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


用MLPRegressor与KNeighborsRegressor进行拟合

 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

MLPRegressor与KNeighborsRegressor拟合线不一致

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],[-4,-3],[-3,-2],[-2,-1],[-1,0],[0,1],[1,2],[2,3],[3,4],[4,5] 
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]]


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个箱子)

#使用独热编码进行数据表达
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='New KNN')
plt.plot(X,y,'o',c='g')
plt.legend(loc='best')
plt.show()

image.png


MLP与KNN拟合曲线保持一致,但是在每个箱子里面均为横直线,即斜率为0

对于基于决策树算法(随机森林,梯度上升决策树,决策树)没有效果


14.2.4 PolynomialFeatures类


class sklearn.preprocessing.PolynomialFeatures(degree=2, *, interaction_only=False, include_bias=True, order='C')


属性

属性

类型

解释

powers_

ndarray of shape (n_output_features, n_input_features)

powers_[ij]是第i个输出中第j个输入的指数。

n_input_features_

Int

输入功能的总数。

n_output_features_

Int

多项式输出特征的总数。输出特征的数量是通过迭代输入特征的所有适当大小的组合来计算的。


方法

fit(X[, y])

计算输出特征的数量。

fit_transform(X[, y])

适应数据,然后转换它。

get_feature_names([input_features])

返回输出功能的功能名称。

get_params([deep])

获取此估计器的参数。

set_params(**params)

设置此估计器的参数。

transform(X)

将数据转换为多项式特征。


14.1.5 数据升维

统计建模方式:

  • 交互性特征(Interaction Feature);
  • 多项式特征(Polynomial Feature)。


1) 交互性特征(Interaction Feature)

array_1 = [0,1,2,3,4]
array_2 = [5,6,7,8,9]
array3 = np.hstack((array_1,array_2))
print("将数组2添加到数据1后面去得到:\n{}".format(array3))


输出

将数组2添加到数据1后面去得到:
[0 1 2 3 4 5 6 7 8 9]


#将原始数据和装箱数据进行堆叠
X_stack = np.hstack([X,X_in_bin])
print("X.shape:\n",X.shape)
print("X_in_bin.shape:\n",X_in_bin.shape)
print("X_stack.shape:\n",X_stack.shape


输出

X.shape:
 (50, 1)
X_in_bin.shape:
 (50, 10)
X_stack.shape:
 (50, 11)
#将数据进行堆叠
line_stack = np.hstack([line,onehot_line])
mlpr_interact = MLPRegressor().fit(X_stack,y)
plt.plot(line,mlpr_interact.predict(line_stack),label='MLP for interaction')
plt.ylim(-4,4)
for vline in bins:
       plt.plot([vline,vline],[-5,5],":",c='k')
plt.legend(loc='lower right')
plt.plot(X,y,"o",c='g')
plt.show()

image.png

每一个箱子中的斜率加大了,但是斜率是一样的。


#使用新的叠堆方式处理数据
X_multi = np.hstack([X_in_bin,X*X_in_bin])
print("X_multi.shape:\n",X_multi.shape)
print("X_multi[0]:\n",X_multi[0])


输出

X_multi.shape:
 (50, 20)
X_multi[0]:
 [0.         0.         0.         0.         0.         0.
 0.         0.         0.         1.         0.         0.
 0.         0.         0.         0.         0.         0.
 0.         4.84191851]
前10个数据点的特征值:
[[ 4.84191851]
 [-1.66587734]
 [ 1.73701625]
 [-3.03609583]
 [-1.45553535]
 [ 3.13365953]
 [-2.52150446]
 [-0.41388675]
 [ 3.77301421]
 [-1.08341539]]

保持X_in_bin中的1以及元数据:4.84191851

目录
相关文章
|
10月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
407 7
|
8月前
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
1107 12
Scikit-learn:Python机器学习的瑞士军刀
|
7月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
339 1
|
11月前
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
Python与机器学习:使用Scikit-learn进行数据建模
|
10月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
10月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
236 0
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
496 0
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练

推荐镜像

更多