小编Sup*_*dar的帖子

来自OneHotEncoder的功能名称

我正在使用OneHotEncoder编码一些分类变量(例如-Sex和AgeGroup)。编码器产生的特征名称类似-'x0_female','x0_male','x1_0.0','x1_15.0'等。

>>> train_X = pd.DataFrame({'Sex':['male', 'female']*3, 'AgeGroup':[0,15,30,45,60,75]})

>>> from sklearn.preprocessing import OneHotEncoder
>>> encoder = OneHotEncoder()
>>> train_X_encoded = encoder.fit_transform(train_X[['Sex', 'AgeGroup']])
Run Code Online (Sandbox Code Playgroud)
>>> encoder.get_feature_names()
>>> array(['x0_female', 'x0_male', 'x1_0.0', 'x1_15.0', 'x1_30.0', 'x1_45.0',
       'x1_60.0', 'x1_75.0'], dtype=object)
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉OneHotEncoder创建特征名称的方式,即在列开头添加列名称,类似于-Sex_female,AgeGroup_15.0等,类似于Pandas get_dummies()所做的。

python-3.x scikit-learn one-hot-encoding

11
推荐指数
2
解决办法
2791
查看次数

Pandas 获取数字分类数据的 dummy()

我有两列:

  • 性别(字符串类型的分类值为“男性”和“女性”)
  • 类(整数类型的分类值为 1 到 10)

当我pd.get_dummies()在上面的 2 列上执行时,只有 'Sex' 被编码到 2 列中。但是 'Class' 不会被 get_dummies 函数转换。

我还希望将“类”转换为 10 个虚拟列,类似于 One Hot Encoding。

这是预期的行为吗?有解决方法吗?

encoding pandas categorical-data

6
推荐指数
2
解决办法
8104
查看次数

Keras flow_from_directory() 只能从选定的子目录中读取

我有一个目录结构如下。

train
|- dog --> contains image files of dogs
|- cat --> contains image files of cats
|- elephant --> contains image files of elephants
Run Code Online (Sandbox Code Playgroud)

我想训练一个 CNN 来识别动物,但仅限于猫和狗,而不是大象。

我想使用keras ImageDataGenerator类来增加数据和flow_from_directory()方法来读取图像文件。

train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(directory='train', class_mode='categorical', target_size=(64,64), batch_size=16, shuffle=True)
Run Code Online (Sandbox Code Playgroud)

上面的代码将从'train'的所有子目录中读取数据,这是我不想要的。一种选择是创建一个新目录并复制“dog”和“cat”子目录以及其中的文件。但是有没有办法从flow_from_directory()方法本身控制它?

deep-learning conv-neural-network keras tensorflow

6
推荐指数
1
解决办法
2242
查看次数

对于大的正输入,Sigmoid 函数返回 1

我用 Python 编写了以下函数来计算标量、向量或矩阵的 sigmoid 函数。

def sigmoid(z):
    sig = 1.0/(1.0 + np.exp(-z))
    return sig
Run Code Online (Sandbox Code Playgroud)

对于相对较大的 z 正值,e^-z返回一个非常小的值接近零 (0),因此 sig 的值四舍五入为 1。我的最终目标是确定逻辑回归算法的成本函数。由于 sigmoid 正好返回 1,因此log(1-1)返回 '​​nan'。我怎样才能解决这个问题,让我的 sigmoid() 函数返回正确的值而不是四舍五入e^-z到 0?

当我使用均值和标准差对输入特征进行归一化时,效果很好。但是有没有办法让它在更大的 z 值下工作?

另外,我在 Matlab 上尝试了相同的方法,并且在没有标准化的情况下也能正常工作。

>>> Z = np.array([[60, 100],[20, 80]])
>>> Z
array([[ 60, 100],
       [ 20,  80]])
>>> np.exp(-Z)
array([[8.75651076e-27, 3.72007598e-44],
       [2.06115362e-09, 1.80485139e-35]])
>>> 1.0/(1.0 + np.exp(-Z))
array([[1., 1.],
       [1., 1.]])
Run Code Online (Sandbox Code Playgroud)

python machine-learning logistic-regression sigmoid

5
推荐指数
1
解决办法
3073
查看次数

如何将json键转换为小写字母?

我需要将json键转换为小写字母,因为该对象是根据使用不一致的字母大小写键收集的字符串构建的。我尝试了以下方法:

import json

alphabet = """{"My-Name": "ag=11", "Rule": "default"}"""
alphabetDict = json.loads(alphabet)
alphabetDictKeys = alphabetDict.keys()


for key, value in alphabetDict:
    smallalphabetDict[key.lower()] = value

smallalphabetDictKeys = smallalphabetDict.keys()
print("small keys:"+str(smallalphabetDictKeys))

# if statement using small case letters
if "my-name" in smallalphabetDictKeys:
    print("key found")
    print("value"+str(smallalphabetDict["my-name"])) 
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误:

追溯(最近一次呼叫最近):文件“ test.py”,第11行,用于输入密钥,字母中的值Dict:ValueError:太多值无法解包(预期2)

您能否在转换中我的代码错误的地方纠正我?

python json dictionary python-3.x

-2
推荐指数
1
解决办法
107
查看次数