当前位置: 首页 > news >正文

郑州 做网站seo教学网站

郑州 做网站,seo教学网站,wordpress爆破软件,男人和男人做爰漫画网站添加原始数据的交互特征(interaction feature)和多项式特征(polynomial feature)可以丰富特征表示,特别是对于线性模型。这种特征工程可以用统计建模和许多实际的机器学习应用中。 上一次学习:线性模型对w…

添加原始数据的交互特征(interaction feature)和多项式特征(polynomial feature)可以丰富特征表示,特别是对于线性模型。这种特征工程可以用统计建模和许多实际的机器学习应用中。

上一次学习:线性模型对wave数据集中的每个箱子都学到一个常数值。但我们知道,线性模型不仅可以学习偏移,还可以学习斜率。想要向分箱数据上的线性模型添加斜率,一种方法是重新加入原始特征。这样会得到11维的数据集,如下代码:

import numpy as np
import mglearn
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
#from sklearn.tree import DecisionTreeRegressor
#from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import KBinsDiscretizerX, y = mglearn.datasets.make_wave(n_samples=100)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)# 生成10个箱子
#kb = KBinsDiscretizer(n_bins=10, strategy='uniform')
#kb.fit(X)kb = KBinsDiscretizer(n_bins=10, strategy='uniform', encode='onehot-dense')
kb.fit(X)
#X_binned = kb.transform(X)
# 记录每个数据点所属的箱子。
X_binned = kb.transform(X)
line_binned = kb.transform(line)# 加入原始特征
X_combined = np.hstack([X, X_binned])
print(X_combined.shape)reg = LinearRegression().fit(X_combined, y)line_combined = np.hstack([line, line_binned])
plt.plot(line, reg.predict(line_combined), label='linear regression combined')
plt.vlines(kb.bin_edges_[0], -3, 3, linewidth=1, alpha=.2)
plt.legend(loc="best")
plt.ylabel("Regression output")
plt.xlabel("Input feature")
plt.plot(X[:, 0], y, 'o', c='k')
plt.show()

输出结果:(100, 11)

输出图形:

输出的图形是使用分箱特征和单一全局斜率的线性回归。

在这个例子中,模型在每个箱子中都学到一个偏移,还学到一个斜率。学到的斜率是向下的,并且在所有箱子中都相同——只有一个x轴特征,也就只有一个斜率。因为斜率在所有箱子中是相同的,所以它似乎不是很有用。我们更希望每个箱子都有一个不同的斜率。为了实现这一点,我们可以添加交互特征或乘积特征,用来表示数据点所在的箱子以及数据点在x轴上的位置。这个特征是箱子指示符与原始特征的乘积。下面来创建数据集:

import numpy as np
import mglearn
#import matplotlib.pyplot as plt
#from sklearn.linear_model import LinearRegression
#from sklearn.tree import DecisionTreeRegressor
#from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import KBinsDiscretizerX, y = mglearn.datasets.make_wave(n_samples=100)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)# 生成10个箱子
#kb = KBinsDiscretizer(n_bins=10, strategy='uniform')
#kb.fit(X)kb = KBinsDiscretizer(n_bins=10, strategy='uniform', encode='onehot-dense')
kb.fit(X)
#X_binned = kb.transform(X)
# 记录每个数据点所属的箱子。
X_binned = kb.transform(X)
line_binned = kb.transform(line)# 加入原始特征
X_combined = np.hstack([X, X_binned])
#print(X_combined.shape)line_combined = np.hstack([line, line_binned])# 创建数据集
X_product = np.hstack([X_binned, X * X_binned])
print(X_product.shape)

输出:(100, 20)  。这个数据集现在有20个特征:数据点所在箱子的指示符与原始特征和箱子指示符的乘积。可以将乘积特征看作每个箱子x轴特征的单独副本。它在箱子内等于原始特征,在其他 位置等于零。下面我们代码绘图给出线性模型在这种新表示上的结果:

import numpy as np
import mglearn
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
#from sklearn.tree import DecisionTreeRegressor
#from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import KBinsDiscretizerX, y = mglearn.datasets.make_wave(n_samples=100)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)# 生成10个箱子
#kb = KBinsDiscretizer(n_bins=10, strategy='uniform')
#kb.fit(X)kb = KBinsDiscretizer(n_bins=10, strategy='uniform', encode='onehot-dense')
kb.fit(X)
#X_binned = kb.transform(X)
# 记录每个数据点所属的箱子。
X_binned = kb.transform(X)
line_binned = kb.transform(line)# 加入原始特征
X_combined = np.hstack([X, X_binned])
#print(X_combined.shape)# 创建数据集
X_product = np.hstack([X_binned, X * X_binned])
#print(X_product.shape)reg = LinearRegression().fit(X_product, y)line_product = np.hstack([line_binned, line * line_binned])plt.plot(line, reg.predict(line_product), label='linear regression product')
plt.vlines(kb.bin_edges_[0], -3, 3, linewidth=1, alpha=.2)
plt.plot(X[:, 0], y, 'o', c='k')
plt.ylabel("Regression output")
plt.xlabel("Input feature")
plt.legend(loc="best")
plt.show()

输出图形:

上图显示每个箱子具有不同的偏移和斜率。使用分箱是扩展连续特征的一种方法。另一种方法是 使用原始特征的多项式(polynomial)。对于给定特征x,我们可以考虑x ** 2、x ** 3、x ** 4,等等。这在preprocessing模块的PolynomialFeatures中实现:

import numpy as np
import mglearn
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
#from sklearn.tree import DecisionTreeRegressor
#from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import KBinsDiscretizer
from sklearn.preprocessing import PolynomialFeaturesX, y = mglearn.datasets.make_wave(n_samples=100)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)# 生成10个箱子
#kb = KBinsDiscretizer(n_bins=10, strategy='uniform')
#kb.fit(X)kb = KBinsDiscretizer(n_bins=10, strategy='uniform', encode='onehot-dense')
kb.fit(X)
#X_binned = kb.transform(X)
# 记录每个数据点所属的箱子。
X_binned = kb.transform(X)
line_binned = kb.transform(line)# 加入原始特征
X_combined = np.hstack([X, X_binned])
#print(X_combined.shape)# 创建数据集
#X_product = np.hstack([X_binned, X * X_binned])
#print(X_product.shape)# 包含直到x ** 10的多项式:
# 默认的"include_bias=True"添加恒等于1的常数特征
poly = PolynomialFeatures(degree=10, include_bias=False)
poly.fit(X)
X_poly = poly.transform(X)
# 多项式的次数为 10,因此生成10个特征:
print("X_poly.shape: {}".format(X_poly.shape))

输出:X_poly.shape: (100, 10)

比较X_ploy和X的元素:

import numpy as np
import mglearn
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
#from sklearn.tree import DecisionTreeRegressor
#from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import KBinsDiscretizer
from sklearn.preprocessing import PolynomialFeaturesX, y = mglearn.datasets.make_wave(n_samples=100)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)# 生成10个箱子
#kb = KBinsDiscretizer(n_bins=10, strategy='uniform')
#kb.fit(X)kb = KBinsDiscretizer(n_bins=10, strategy='uniform', encode='onehot-dense')
kb.fit(X)
#X_binned = kb.transform(X)
# 记录每个数据点所属的箱子。
X_binned = kb.transform(X)
line_binned = kb.transform(line)# 加入原始特征
X_combined = np.hstack([X, X_binned])
#print(X_combined.shape)# 创建数据集
#X_product = np.hstack([X_binned, X * X_binned])
#print(X_product.shape)# 包含直到x ** 10的多项式:
# 默认的"include_bias=True"添加恒等于1的常数特征
poly = PolynomialFeatures(degree=10, include_bias=False)
poly.fit(X)
X_poly = poly.transform(X)
# 多项式的次数为 10,因此生成10个特征:
print("X_poly.shape: {}".format(X_poly.shape))# 比较 X_poly 和 X 的元素:
print("Entries of X:\n{}".format(X[:5]))
print("Entries of X_poly:\n{}".format(X_poly[:5]))

输出:

Entries of X:
[[-0.75275929]
 [ 2.70428584]
 [ 1.39196365]
 [ 0.59195091]
 [-2.06388816]]
Entries of X_poly:
[[-7.52759287e-01  5.66646544e-01 -4.26548448e-01  3.21088306e-01
  -2.41702204e-01  1.81943579e-01 -1.36959719e-01  1.03097700e-01
  -7.76077513e-02  5.84199555e-02]
 [ 2.70428584e+00  7.31316190e+00  1.97768801e+01  5.34823369e+01
   1.44631526e+02  3.91124988e+02  1.05771377e+03  2.86036036e+03
   7.73523202e+03  2.09182784e+04]
 [ 1.39196365e+00  1.93756281e+00  2.69701700e+00  3.75414962e+00
   5.22563982e+00  7.27390068e+00  1.01250053e+01  1.40936394e+01
   1.96178338e+01  2.73073115e+01]
 [ 5.91950905e-01  3.50405874e-01  2.07423074e-01  1.22784277e-01
   7.26822637e-02  4.30243318e-02  2.54682921e-02  1.50759786e-02
   8.92423917e-03  5.28271146e-03]
 [-2.06388816e+00  4.25963433e+00 -8.79140884e+00  1.81444846e+01
  -3.74481869e+01  7.72888694e+01 -1.59515582e+02  3.29222321e+02
  -6.79478050e+02  1.40236670e+03]]

我们可以通过调用 get_feature_names_out 方法来获取特征的语义,给出每个特征的指数:

import numpy as np
import mglearn
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
#from sklearn.tree import DecisionTreeRegressor
#from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import KBinsDiscretizer
from sklearn.preprocessing import PolynomialFeaturesX, y = mglearn.datasets.make_wave(n_samples=100)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)# 生成10个箱子
#kb = KBinsDiscretizer(n_bins=10, strategy='uniform')
#kb.fit(X)kb = KBinsDiscretizer(n_bins=10, strategy='uniform', encode='onehot-dense')
kb.fit(X)
#X_binned = kb.transform(X)
# 记录每个数据点所属的箱子。
X_binned = kb.transform(X)
line_binned = kb.transform(line)# 加入原始特征
X_combined = np.hstack([X, X_binned])
#print(X_combined.shape)# 创建数据集
#X_product = np.hstack([X_binned, X * X_binned])
#print(X_product.shape)# 包含直到x ** 10的多项式:
# 默认的"include_bias=True"添加恒等于1的常数特征
poly = PolynomialFeatures(degree=10, include_bias=False)
poly.fit(X)
X_poly = poly.transform(X)
# 多项式的次数为 10,因此生成10个特征:
print("X_poly.shape: {}".format(X_poly.shape))# 比较 X_poly 和 X 的元素:
print("Entries of X:\n{}".format(X[:5]))
print("Entries of X_poly:\n{}".format(X_poly[:5]))#调用 get_feature_names_out 方法来获取特征的语义,给出每个特征的指数
print("Polynomial feature names:\n{}".format(poly.get_feature_names_out()))

输出:

Polynomial feature names:
['x0' 'x0^2' 'x0^3' 'x0^4' 'x0^5' 'x0^6' 'x0^7' 'x0^8' 'x0^9' 'x0^10']

可以看到,X_poly 的第一列与 X 完全对应,而其他列则是第一列的幂。有趣的是,可以发现有些值非常大。第二行有大于 20000 的元素,数量级与其他行都不相同。将多项式特征与线性回归模型一起使用,可以得到经典的多项式回归(polynomial regression)模型,见如下代码实现:

import numpy as np
import mglearn
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
#from sklearn.tree import DecisionTreeRegressor
#from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import KBinsDiscretizer
from sklearn.preprocessing import PolynomialFeaturesX, y = mglearn.datasets.make_wave(n_samples=100)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)# 生成10个箱子
#kb = KBinsDiscretizer(n_bins=10, strategy='uniform')
#kb.fit(X)kb = KBinsDiscretizer(n_bins=10, strategy='uniform', encode='onehot-dense')
kb.fit(X)
#X_binned = kb.transform(X)
# 记录每个数据点所属的箱子。
X_binned = kb.transform(X)
#line_binned = kb.transform(line)# 加入原始特征
X_combined = np.hstack([X, X_binned])
#print(X_combined.shape)# 创建数据集
#X_product = np.hstack([X_binned, X * X_binned])
#print(X_product.shape)# 包含直到x ** 10的多项式:
# 默认的"include_bias=True"添加恒等于1的常数特征
poly = PolynomialFeatures(degree=10, include_bias=False)
poly.fit(X)
X_poly = poly.transform(X)
# 多项式的次数为 10,因此生成10个特征:
#print("X_poly.shape: {}".format(X_poly.shape))# 比较 X_poly 和 X 的元素:
#print("Entries of X:\n{}".format(X[:5]))
#print("Entries of X_poly:\n{}".format(X_poly[:5]))#调用 get_feature_names 方法来获取特征的语义,给出每个特征的指数
#print("Polynomial feature names:\n{}".format(poly.get_feature_names_out()))reg = LinearRegression().fit(X_poly, y)line_poly = poly.transform(line)
plt.plot(line, reg.predict(line_poly), label='polynomial linear regression')
plt.plot(X[:, 0], y, 'o', c='k')
plt.ylabel("Regression output")
plt.xlabel("Input feature")
plt.legend(loc="best")
plt.show()

输出图形:

上图是具有 10 次多项式特征的线性回归。多项式特征在这个一维数据上得到了非常平滑的拟合。但高次多项式在边界上或数据很少的区域可能有极端的表现。作为对比,下面是在原始数据上学到的核SVM模型,没有做任何变换:

import numpy as np
import mglearn
import matplotlib.pyplot as plt
from sklearn.svm import SVRX, y = mglearn.datasets.make_wave(n_samples=100)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)for gamma in [1, 10]:svr = SVR(gamma=gamma).fit(X, y)plt.plot(line, svr.predict(line), label='SVR gamma={}'.format(gamma))plt.plot(X[:, 0], y, 'o', c='k')
plt.ylabel("Regression output")
plt.xlabel("Input feature")
plt.legend(loc="best")
plt.show()

输出图形(对于RBF核的SVM,使用不同 gamma 参数的对比):

使用更加复杂的模型(即核 SVM),能够学到一个与多项式回归的复杂度类似的预测结果,且不需要进行显式的特征变换。

http://www.khdw.cn/news/63167.html

相关文章:

  • 怎么做网站排名会更好免费的外链网站
  • wordpress网页移动自己做seo网站推广
  • 自建博客网站属于b2b的网站有哪些
  • 做网站时候如果添加微信代码建立网站用什么软件
  • 广州企业网络营销全网推广某一网站seo策划方案
  • h5是什么网站上面做的知乎关键词排名优化工具
  • 做素材网站服务器宠物美容师宠物美容培训学校
  • 郑州定制网站网站搭建平台都有哪些
  • 如何做网站编辑seo综合诊断工具
  • 网站 设计风格优化关键词排名seo
  • 星巴克vi设计分析关于进一步优化当前疫情防控措施
  • 做网站需要会写代码6网站服务器软件
  • 深圳办公室租金多少钱一平网站seo优化的目的
  • 洛阳 网站建设百度统计工具
  • 中企动力双语网站网站数据分析案例
  • 建好网站是不是还得维护seo专业培训班
  • 福州疫情最新消息aso优化是什么
  • 做网站前台需要什么技能搜索关键词排行榜
  • 网站建设导入视频线上销售平台如何推广
  • 万能视频解析接口网站怎么做搜索引擎优化人员优化
  • wordpress内容爬取seo是怎么优化上去
  • 怎么做多个网站单点登录实时热搜榜榜单
  • 剑网三奇遇查询网站怎么做免费seo网站的工具
  • 梅州市住房与城乡建设局网站百度一对一解答
  • 商城首页网站torrentkitty磁力猫引擎
  • 做网站注册有哪些灰色行业关键词优化
  • 个人旅游网站模版友情链接教程
  • 工作网站开发制作seo免费培训
  • 东莞网站建设熊掌号长春网站建设定制
  • 网站建设方案的所属行业是百度推广客服电话24小时