1 均值编码
![](https://img.haomeiwen.com/i11276984/75153668759a7510.png)
1为什么均值编码有效?
如果数据的“类别基数”比较高,那么均值编码是最简单有效的一种。除此之外,编码方式还有LabelEncoder, OneHotEncoder。
特征类别比较多时三种编码方式的缺点比较:
(1)均值编码:可能导致过拟合和数据泄露问题,所以要配合正则化使用。
·用CV loop工具进行正则化(深度学习)
·Regularization Smoothing
·Regularization Expanding mean
(2)LabelEncoder:类别基数大使用LabelEncoder会导致编码噪声。
(3)OneHotEncoder:导致稀疏性问题,但是可以通过引起“其他”类别,解决稀疏问题。
2 擅用热力图
![](https://img.haomeiwen.com/i11276984/e00eb699d7459201.png)
上图的横坐标表示一天的24时刻,纵坐标表示一周七天。通过观察热力图,不难发现周末的用电模式和深夜的一致。(这个特征帮助原文作者大幅提高了模型效果)
效仿作者做了如下如力图,怎么说呢?可以说label与时刻无关,至于日期的变化有关,而且还呈现某种周期规律。事实上确实如此~
import seaborn as sns
d1 = train[["日期","时刻","电场实际太阳辐射指数"]]
d2 = d1.pivot(index="日期",columns="时刻",values="电场实际太阳辐射指数")
fig = plt.figure(figsize=(15,10))
sns.heatmap(d2)
![](https://img.haomeiwen.com/i11276984/c29fb27ec172a675.png)
3 自编码器-表征学习
![](https://img.haomeiwen.com/i11276984/596c6fbd92912546.png)
自编码器可以直接从样本中学习,这意味着算法直接从训练集中捕捉最显著的特征,无需其他特征工程。
def plot_cluster(dimension1,dimension2):
d1 = train[[dimension1,dimension2]]
km = KMeans(n_clusters=5,random_state=14)
km.fit(d1)
pre_center = km.cluster_centers_
y_pre = km.predict(d1)
plt.scatter(x=d1[dimension1],y=d1[dimension2],c=y_pre)
plt.scatter(x=pre_center[:,0],y=pre_center[:,1],c=[0,1,2,3,4],marker="o",edgecolors ="tomato")
plt.xlabel(dimension2)
plt.ylabel(dimension1)
fig = plt.figure(figsize=(15,8))
ax1 = plt.subplot(131)
plot_cluster("湿度","气压")
ax2 = plt.subplot(132)
plot_cluster("温度","湿度")
ax3 = plt.subplot(133)
plot_cluster("风速","湿度")
![](https://img.haomeiwen.com/i11276984/161ae73a6d219bc6.png)
这意味着,利用无监督学习自动从数据中学出5类样本,直接用上无监督学习打的标签作为一维特征。为什么这里k定为5?因为这个数据有个先验信息,就是有5个默认的类。
4 Binning
为什么Binning?
如果你要预测未来5年的股票,那么每天的股票波动对你来说不必全部考虑进模型,这样做反而会给模型带来更多的噪声。所以,可以使用Binning操作。
网友评论