关于如何将分类数据编码为Sklearn Decission树有几篇帖子,但是从Sklearn文档中我们得到了这些
决策树的一些优点是:
(......)
能够处理数字和分类数据.其他技术通常专门用于分析仅具有一种变量类型的数据集.有关更多信息,请参阅算法
但是运行以下脚本
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
data = pd.DataFrame()
data['A'] = ['a','a','b','a']
data['B'] = ['b','b','a','b']
data['C'] = [0, 0, 1, 0]
data['Class'] = ['n','n','y','n']
tree = DecisionTreeClassifier()
tree.fit(data[['A','B','C']], data['Class'])
Run Code Online (Sandbox Code Playgroud)
输出以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/sklearn/tree/tree.py", line 154, in fit
X = check_array(X, dtype=DTYPE, accept_sparse="csc")
File "/usr/local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 377, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: could not convert string to float: b …Run Code Online (Sandbox Code Playgroud) 我有一个包含很多列的数据框.现在我想只选择某些列.我已将要选择的列的所有名称保存到Python列表中,现在我想根据此列表过滤我的数据帧.
我一直在努力做到:
df_new = df[[list]]
Run Code Online (Sandbox Code Playgroud)
其中list包含我要选择的所有列名.
但是我得到错误:
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
对此有何帮助?
我正在尝试连接两个沿 0 轴具有不同列名的数据框。我在这里发现了一个类似的问题How to use join_axes in the column-wise axis concatenation using pandas DataFrame? 但是这个解决方案对我不起作用,因为我的两个数据框的列名不一样。由于我的原始数据太大而无法在此处发布,因此以下示例应该说明我正在尝试做的事情:
df1 = pd.DataFrame(np.random.randint(0,100,size=(1, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.randint(0,100,size=(1, 4)), columns=list('EFGH'))
#df1
A B C D
0 26 39 7 44
#df2
E F G H
0 12 44 26 64
pd.concat([df1,df2],axis=0).reset_index(drop=True)
# desired output looks like this
A B C D E F G H
0 26.0 39.0 7.0 44.0 NaN NaN NaN NaN
1 NaN NaN NaN NaN 12.0 44.0 26.0 64.0
Run Code Online (Sandbox Code Playgroud)
上面的代码完美运行。但是,一旦我使用上面完全相同的语法为 …
我在 Keras 中使用 ImageDataGenerator(),我想获取整个测试数据的标签。
目前我正在使用以下代码来完成此任务:
test_batches = ImageDataGenerator().flow_from_directory(...)
test_labels = []
for i in range(0,3):
test_labels.extend(np.array(test_batches[i][1]))
Run Code Online (Sandbox Code Playgroud)
但是,此代码仅有效,因为我知道我总共有 150 张图像,并且我的批量大小定义为 50。
此外使用:
imgs, labels = next(test_batches)
Run Code Online (Sandbox Code Playgroud)
正如在这个主题的类似帖子中所建议的,只返回一批的标签,而不是整个数据集。因此,我想知道是否有比我上面使用的方法更有效的方法。
我正在尝试微调 keras 中的 Inception-V3 模型。因此,我想使用内置的预处理函数和flow_from_dataframe.
但是,我不确定如何keras.applications.inception_v3.preprocess_input在ImageDataGenerator
此外,我找到了两种方法:
1)
datagen=ImageDataGenerator(preprocessing_function=keras.applications.inception_v3.preprocess_input)
Run Code Online (Sandbox Code Playgroud)
2)
def preprocess_input_new(x):
img = keras.applications.inception_v3.preprocess_input(img_to_array(x))
return image.array_to_img(img)
datagen=ImageDataGenerator(preprocessing_function=preprocess_input_new)
Run Code Online (Sandbox Code Playgroud)
两种方式似乎都会产生合理但不同的结果,因此我想知道哪一种是首选/正确的?
我在Google Cloud App Engine(flex)上运行Flask应用.在本地运行它可以正常工作,但一旦它部署我得到一个502 Bad Gateway error (nginx).现在我想弄清楚导致这种情况的原因,但我找不到任何选项来查看我的应用程序创建的控制台日志.
由于它在我的本地环境中运行良好,我当前解决此问题的工作流程涉及在本地更改我的代码并部署它以查看它是否可以在以后工作,但每次部署只需要花费30分钟才能确定它仍然无效.必须有一种方法可以更有效地做到这一点.
按照文档https://cloud.google.com/appengine/docs/flexible/python/debugging-an-instance 我能够以调试模式SSH进入我的实例并从Cloud Shell启动Flask应用程序,但是它告诉我在http://127.0.0.1:8080/上访问它,我无法从云服务器访问它.因此,我无法浏览网页以重现502错误,然后在控制台中查看输出.
如何找出导致服务器上的502错误的原因?
我发现了很多代码示例,其中人们使用 usingrescale=1./255或正在使用来预处理他们的图像数据,他们将其preprocessing_function设置preprocess_input为他们在 ImageDataGenerator 中使用的相应模型的 。首先,我认为 usingrescale=1./255仅在处理预训练的 vgg16 模型时有效,但我一直看到它与预训练的 resetnet50、inception 等一起使用的示例。
虽然 keras-blog ( https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html ) 使用这种方法......
ImageDataGenerator(rescale=1./255, ...
Run Code Online (Sandbox Code Playgroud)
... Keras 文档 ( https://keras.io/applications/ ) 使用这种方法:
from keras.applications.vgg19 import preprocess_input
ImageDataGenerator(preprocessing_function=preprocess_input, ...
Run Code Online (Sandbox Code Playgroud)
我认为使用我想要训练的相应模型的相应 preprocess_input 总是优于使用 rescale=1./255 方法,因为它将 100% 反映在训练预训练模型期间使用的预处理。
在预处理图像以进行迁移学习时,我需要澄清何时使用我想要训练的各个模型的rescale=1./255vs keras 内置preprocess_input。这是否仅在使用预训练模型(即加载权重与从头开始训练)时有所不同?
使用model.save()我可以保存经过训练的模型。但是,在使用模型进行预测时,我仍然需要恢复相应的类/标签映射(0: 'cat', 1: 'dog' ... etc.)。目前我正在保存.class_indices我的train_generator并重新加载它以准备我的测试数据来完成这个。然而,这很不方便,因为它迫使我将映射文件保存在某个地方,以备将来使用我保存的model.h5文件。
因此,我想知道是否有一种更简单的方法来保存类信息,即将它保存在模型文件中。我在 keras 文档中找不到任何关于此的信息,只有这篇文章将类标签附加到 Keras 模型,有人试图提出“解决方法”,但我认为必须有更好的方法。
我想在喀拉拉邦获得我模型的前k位精度。
我在这里找到了一个帖子:如何计算喀拉拉邦的top5准确性?建议以下内容:
from keras import backend as K
import tensorflow as tf
top_values, top_indices = K.get_session().run(tf.nn.top_k(_pred_test, k=5))
Run Code Online (Sandbox Code Playgroud)
输出只给了我两个数组:
top_values:
array([[1., 0., 0., 0., 0.],
[1., 0., 0., 0., 0.],
[1., 0., 0., 0., 0.],
...,
[1., 0., 0., 0., 0.],
[1., 0., 0., 0., 0.],
[1., 0., 0., 0., 0.]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
top_indices:
array([[12, 0, 1, 2, 3],
[13, 0, 1, 2, 3],
[15, 0, 1, 2, 3],
...,
[12, 0, 1, 2, 3],
[17, 0, 1, 2, 3], …Run Code Online (Sandbox Code Playgroud) 我想使用keras训练CNN进行多标签图像分类任务.但是我不确定如何准备我的转换数据.更具体地说,我想知道我是否需要训练图像显示两个或更多标签的组合,或者是否足以在单个标签上训练网络,然后它将能够检测图像中的多个标签.
我认为我的问题变得更清楚了一个例子:
假设我正在使用dog vs cat分类数据集,我想建立一个能够将图像分类为狗或猫或在一个图像中看到两个动物的模型.在这种情况下,我是否需要使用显示猫,狗和图像的图像来训练模型,这些图像在一个图像中显示或者仅仅具有仅显示猫和狗的训练图像?
machine-learning neural-network multilabel-classification conv-neural-network keras