我正在使用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()所做的。
我有两列:
当我pd.get_dummies()在上面的 2 列上执行时,只有 'Sex' 被编码到 2 列中。但是 'Class' 不会被 get_dummies 函数转换。
我还希望将“类”转换为 10 个虚拟列,类似于 One Hot Encoding。
这是预期的行为吗?有解决方法吗?
我有一个目录结构如下。
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()方法本身控制它?
我用 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) 我需要将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 ×2
python-3.x ×2
dictionary ×1
encoding ×1
json ×1
keras ×1
pandas ×1
scikit-learn ×1
sigmoid ×1
tensorflow ×1