我正在尝试对python中的数据进行预处理,以用于深度学习keras函数。
我使用categorical crossentropy
作为模型拟合中的损失函数。它需要分类变量作为目标。
我的目标数据样本:
y_train = y_train.astype('category')
y_train.head()
truth
0 0
1 0
2 1
3 0
4 0
当我尝试将数据框列转换为分类列时:
num_classes=2
y_train = keras.utils.to_categorical(y_train, num_classes)
它产生了一个错误:IndexError: index 1 is out of bounds for axis 1 with size 1
。
如何正确转换数据?
顺便说一句,如果我有3800个观测值的样本,每个样本都有2300个数字(float32)特征,那么哪种keras模型更适合二进制分类?这些功能主要描述图形对象。
答案 0 :(得分:1)
很遗憾,我没有设法重现您的错误。 正在运行:
<div class="rex">
<div class="block">
<img src="MainImg">
<img src="ContentTypeImg">
<ul class="breadcrumb">
<li><a href="#">Home</a></li>
<li><a href="#">Samples</a></li>
<li><a href="#">WEBCASTS</a></li>
</ul>
<div>
<h4> Description </h4>
</div>
<div>
<h5> Author </h5>
</div>
</div>
<div class="block">
<img src="MainImg">
<img src="ContentTypeImg">
<ul class="breadcrumb">
<li><a href="#">Home</a></li>
<li><a href="#">Samples</a></li>
<li><a href="#">WEBCASTS</a></li>
</ul>
<div>
<h4> Description </h4>
</div>
<div>
<h5> Author </h5>
</div>
</div>
<br />
</div>
我得到一个输出:
a=pd.DataFrame(np.concatenate([np.zeros(3),np.ones(3)]) ).astype('int').astype('category')
from keras.utils import to_categorical
to_categorical(a, 2)
也许是版本问题!
好消息是,对于二进制分类问题,您不必使用array([[1., 0.],
[1., 0.],
[1., 0.],
[0., 1.],
[0., 1.],
[0., 1.]], dtype=float32)
。您可以使用categorical_crossentropy
损失,并以y_train作为目标直接进行建模。
关于您最后一次请求哪种keras模型更适合二进制分类的问题,Keras预训练模型正在引用图像。您似乎拥有表格数据,尽管您将无法使用预先训练的模型,但必须自己运行自定义模型。