我们在实际应用中会遇到数据集特征不足的情况,要解决这个问题,就需要对数据集的特征进行扩充,

一般使用两种方法:

交互式特征(Interaction Features)

多项式特征(Ploynomial Features)

1.准备数据集

#导入numpy

import numpy as np

#导入画图工具

import matplotlib.pyplot as plt

#导入神经网络

from sklearn.neural_network import MLPRegressor

#生成随机数列

rnd = np.random.RandomState(38)

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

#设置箱体数为11

bins = np.linspace(-5,5,11)

#将数据进行装箱操作

target_bin = np.digitize(X,bins=bins)

#导入独热编码

from sklearn.preprocessing import OneHotEncoder

onehot = OneHotEncoder(sparse = False,categories='auto')

onehot.fit(target_bin)

#使用独热编码转化数据

X_in_bin = onehot.transform(target_bin)

#生成一个等差数列

line = np.linspace(-5,5,1000,endpoint=False).reshape(-1,1)

#使用独热编码进行数据表达

new_line = onehot.transform(np.digitize(line,bins=bins))

2.向数据集中添加交互式特征

交互式特征是指在原始数据特征中添加交互项,使特征数量增加.

############################# 向数据集添加交互式特征 #######################################

#手工生成两个数组

array_1 = [1,2,3,4,5]

array_2 = [6,7,8,9,0]

#使用hstack将两个数组进行堆叠

array_3 = np.hstack((array_1,array_2))

#打印结果

print('将数组2添加到数据1中后得到:{}'.format(array_3))

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

#将原始数据和装箱后的数据进行堆叠

X_stack = np.hstack([X,X_in_bin])

print(X_stack.shape)

(50, 11)

#将数据进行堆叠

line_stack = np.hstack([line,new_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='gray')

plt.plot(X,y,'o',c='r')

plt.legend(loc='lower right')

#显示图形

plt.show()

#使用新的堆叠方式处理数据

X_multi = np.hstack([X_in_bin,X*X_in_bin])

#打印结果

print(X_multi.shape)

print(X_multi[0])

(50, 20)

[ 0. 0. 0. 1. 0. 0.

0. 0. 0. 0. -0. -0.

-0. -1.1522688 -0. -0. -0. -0.

-0. -0. ]

#重新训练模型

mlpr_multi = MLPRegressor().fit(X_multi,y)

line_multi = np.hstack([new_line,line * new_line])

#绘制图形

plt.plot(line,mlpr_multi.predict(line_multi),label = 'MLP Regressor')

for vline in bins:

plt.plot([vline,vline],[-5,5],':',c='gray')

plt.plot(X,y,'o',c='r')

plt.legend(loc='lower right')

#显示图形

plt.show()

3.向数据集中添加多项式特征

############################# 向数据集添加多项式特征 #######################################

#导入多项式特征工具

from sklearn.preprocessing import PolynomialFeatures

#向数据集添加多项式特征

poly = PolynomialFeatures(degree=20,include_bias = False)

X_poly = poly.fit_transform(X)

#打印结果

print(X_poly.shape)

(50, 20)

#打印结果

print('原始数据集中的第一个样本特征:\n{}'.format(X[0]))

print('\n处理后的数据集中第一个样本特征:\n{}'.format(X_poly[0]))

#打印结果

print('PolynomialFeatures对原始数据的处理:\n{}'.format(poly.get_feature_names()))

原始数据集中的第一个样本特征:

[-1.1522688]

处理后的数据集中第一个样本特征:

[ -1.1522688 1.3277234 -1.52989425 1.76284942 -2.0312764

2.34057643 -2.6969732 3.10763809 -3.58083443 4.1260838

-4.75435765 5.47829801 -6.3124719 7.27366446 -8.38121665

9.65741449 -11.12793745 12.82237519 -14.77482293 17.02456756]

PolynomialFeatures对原始数据的处理:

['x0', 'x0^2', 'x0^3', 'x0^4', 'x0^5', 'x0^6', 'x0^7', 'x0^8', 'x0^9', 'x0^10', 'x0^11', 'x0^12', 'x0^13', 'x0^14', 'x0^15', 'x0^16', 'x0^17', 'x0^18', 'x0^19', 'x0^20']

#导入线性回归

from sklearn.linear_model import LinearRegression

#使用处理后的数据训练线性回归模型

LNR_poly = LinearRegression().fit(X_poly,y)

line_poly = poly.transform(line)

#绘制图形

plt.plot(line,LNR_poly.predict(line_poly),label='Linear Regressor')

plt.xlim(np.min(X)-0.5,np.max(X)+0.5)

plt.ylim(np.min(y)-0.5,np.max(y)+0.5)

plt.plot(X,y,'o',c='r')

plt.legend(loc='lower right')

#显示图形

plt.show()

总结 :

线性模型在高维数据集中有良好的性能,但是在低维数据集中却表现一般,因此我们需要用向数据集中添加交互式特征或多项式特征等方法来对数据集进行特征扩充,以便给数据集升维,从而提高线性模型的准确率.所以可以在一定程度上解决线性模型在低维数据出现欠拟合的问题,

文章引自 ; 《深入浅出python机器学习》

python升维方法_数据升维相关推荐

  1. python 财务分析可视化方法_Python数据可视化的四种简易方法

    Python数据可视化的四种简易方法 作者:PHPYuan 时间:2018-11-28 03:40:43 摘要: 本文讲述了热图.二维密度图.蜘蛛图.树形图这四种Python数据可视化方法. 数据可视 ...

  2. python模型部署方法_终极开箱即用的自动化Python模型选择方法

    python模型部署方法 Choosing the best model is a key step after feature selection in any data science proje ...

  3. 数据归一化处理方法_数据预处理:归一化和标准化

    1. 概述 数据的归一化和标准化是特征缩放(feature scaling)的方法,是数据预处理的关键步骤.不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间 ...

  4. python列表函数方法_与Python列表相关的函数

    对于列表而言,除了设置和修改其中的元素,还有一些其他的方法也很有用,我们来具体看一下. Python 获取列表的长度 有时候,知道列表中有多少个元素的话,会很有帮助.例如,如果我们不断地向 fruit ...

  5. python字符串截取方法_如何使用python语言中的字符串方法截取字符串

    在我们使用python语言中的字符串方法时,可能会判断某个字符串是否以什么开头,可以使用什么进行截取等.下面利用几个实例说明字符串中的方法的用法,操作如下: 工具/原料 python 截图工具 方法/ ...

  6. python中request方法_如何使用python语言中的request模块获取代码

    在python设计语言中,可以使用request第三方包获取请求的参数等,可以利用请求路径获取静态代码,查看相关请求参数和指标等.下面利用一个实例说明request模块获取代码和参数,操作如下: 工具 ...

  7. 女生学python工作累吗_数据分析师女生做累么 工资一般多少

    数据分析师女生做累么,工资一般多少,小编整理了相关信息,希望会对大家有所帮助! 数据分析师女生做累不累 女生还是很适合做数据分析的,数据分析师因为敲的代码少,相比起天天敲代码的职业更适合女生一些,没那 ...

  8. python插件安装方法_【NUKE教程】Nuke Python 安装插件

    有好几种安装插件,gizmos, python脚本的方法. 最简单的就是用home目录的 ~/.nuke目录,其在nuke第一次启动时创建.但在多用户 环境下不太灵活.因此,自定义的plug-in路径 ...

  9. python中repr方法_(转)Python中的常见特殊方法—— repr方法

    在Python中有些方法名.属性名的前后都添加了双下划线,这种方法.属性通常都属于Python的特殊方法和特殊属性,开发者可以通过重写这些方法或者直接调用这些方法来实现特殊的功能.其实前面见过的构造方 ...

最新文章

  1. vue 高阶面试题_高级Web前端工程师面试之Vue问题汇总解析
  2. Nginx反向代理之proxy_pass指令
  3. 苹果降低应用商店收入一半分成、Twitter视频分享功能 Fleet、百度36亿美元收购 YY|Decode the Week...
  4. java字符串表表容量_java – 我可以使用什么符号表来存储~50 mil的字符串,快速查找而不会耗尽堆空间?...
  5. linux shell之得到当前路径下的目录
  6. leetcode 406. 根据身高重建队列(贪心算法)
  7. 程序的灵魂-----算法
  8. 浙江省计算机二级办公软件高级应用技术真题,浙江省计算机二级办公软件高级应用技术考试题库.doc...
  9. 谷歌翻译API, 免费采集翻译
  10. SCI 计算机 数学相关期刊
  11. 从Zemax导入光学系统
  12. web开发设为首页、添加到收藏夹实现方法
  13. CC1110使用433MHz收发数据
  14. 我国国防是全军的国防_国防部长
  15. [技术分享]VMware Esxi 6.7主机配置备份和恢复(SSH、PowerCLI方法)
  16. 多态之父类引用指向子类对象
  17. 2个步骤让你秒获KOL抖音运营数据分析报告
  18. 电脑桌面图标有小黄锁怎么办?
  19. 使用ZRender类库画直线、圆弧、曲线以及点在线上的运动
  20. Django计算机毕业设计超市会员积分管理系统(程序+LW)Python

热门文章

  1. 光学透明胶片行业现状调研及趋势分析报告
  2. 请先切换至Wxml Pannel的解决方法
  3. 云渲染和渲染农场的区别,什么是真正的云渲染
  4. python游戏csgo开挂_V社:用深度学习检测CSGO中的开挂行为
  5. 利用Spire实现对Word模板的指定文字替换(文字、图片、表格)
  6. 微信群聊图灵机器人 复制直接用
  7. 独立站运营 | FaceBook营销神器——聊天机器人ManyChat
  8. Linux 添加一块新硬盘
  9. 利用matlab画地图
  10. 编程语言与冯诺伊曼体系结构