我写了一个函数来正则化机器学习算法中的一组特征。它使用一个矩形2dnumpy数组features
,并返回其正则化版本reg_features
(我使用scikitlearn的波士顿房价数据进行培训)。确切代码:
import tensorflow as tf
import numpy as np
from sklearn.datasets import load_boston
from pprint import pprint
def regularise(features):
# Regularised features:
reg_features = np.zeros(features.shape)
for x in range(len(features)):
for y in range(len(features[x])):
reg_features[x][y] = (features[x][y] - np.mean(features[:, y])) / np.std(features[:, y])
return reg_features
# Get the data
total_features, total_prices = load_boston(True)
# Keep 300 samples for training
train_features = regularise(total_features[:300]) # Works OK
train_prices = total_prices[:300]
# Keep 100 samples for validation
valid_features = regularise(total_features[300:400]) # Works OK
valid_prices = total_prices[300:400]
# Keep remaining samples as test set
test_features = regularise(total_features[400:]) # Does not work
test_prices = total_prices[400:]
请注意,我只在最后一次调用regularise()
时收到此错误,即带有total_features[400:]
的调用:
/Users/RohanSaxena/Documents/projects/sdc/tensor/reg.py:11: RuntimeWarning: invalid value encountered in double_scalars reg_features[x][y] = (features[x][y] - np.mean(features[:, y])) / np.std(features[:, y])
这段代码的其余部分与最后一个调用有关,即regularise(total_features[400:])
为了检查其中一个标准偏差是否为零,我执行以下操作:
^{pr2}$它打印所有的0,即:
0.0
0.0
...
0.0
总共features[0].size
次。这意味着features
中每列的标准偏差为零。在
这看起来很奇怪。所以我打印每一个标准偏差,以确保:
for y in range(len(features[0])):
print(np.std(features[:, y])
我得到所有非零值:
10.9976293017
23.3483275632
6.63216140033
....
8.00329244499
这怎么可能?就在之前,以if
条件为前缀,这段代码给了我所有的零,现在它给出了非零值!这对我来说毫无意义。感谢任何帮助。在
通常,当这种情况发生时,第一个猜测是你将分子除以一个比它大的整型数(而不是一个浮点型),所以结果是0。然而,在这里情况并非如此。在
有时除法并不是按你所期望的那样(逐项),而是向量运算。 然而,这里也不是这样。在
这里的问题是如何引用数据帧
在处理数据帧并将值重新分配给特定单元格时,您希望使用函数
loc
你可以在这里阅读更多关于它的http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html
正是数据}都是0。这会导致代码中出现问题,因为这些列的平均值和标准偏差都是0,结果是0/0。在
total_features[400:]
的子集导致了问题。如果您查看该数据,您将看到列total_features[400:, 1]
和{您可以使用^{} ,而不是编写自己的正则化函数。该函数通过返回全部为0的列来处理常量列。在
您可以轻松验证
scale
与您的regularise
执行相同的计算:下面显示函数如何处理由零组成的列:
^{pr2}$相关问题 更多 >
编程相关推荐