python规范化大数

python规范化大数,python,machine-learning,normalization,Python,Machine Learning,Normalization,我正在做一个聊天机器人程序来练习python和一些机器学习算法 现在我只是给聊天机器人随机的句子,告诉它这些句子是否正确。每个单词都为自己、类型(语法)和语气(积极、消极、中性、粗俗等)指定了关键字 每次输入后,句子都会保存到csv文件中。 每个句子有三个特征:键、键类型、键语气和一个标签:0(不正确)和1(正确) 首先,对于每个键,我都有一个每个单词对应键的列表。我认为这是一个好主意,因为它可以跟踪单词插入的顺序 不幸的是,当保存到csv时,列表被转换为包含列表的字符串,我不知道如何从字符串中

我正在做一个聊天机器人程序来练习python和一些机器学习算法

现在我只是给聊天机器人随机的句子,告诉它这些句子是否正确。每个单词都为自己、类型(语法)和语气(积极、消极、中性、粗俗等)指定了关键字

每次输入后,句子都会保存到csv文件中。 每个句子有三个特征:键、键类型、键语气和一个标签:0(不正确)和1(正确)

首先,对于每个键,我都有一个每个单词对应键的列表。我认为这是一个好主意,因为它可以跟踪单词插入的顺序

不幸的是,当保存到csv时,列表被转换为包含列表的字符串,我不知道如何从字符串中提取列表(即使我知道如何提取列表,我也不知道是否可以将列表数组提供给模型,我的猜测可能不是这样)

所以我想出了一个主意:我可以用一个数字来代表这个数字列表,而不是一个功能列表:

for word in self.words:
    for key in word.word_dict():
        sentence_dict[key] += int(float(word.word_dict()[key]))* 10 **(3*n)
    n+=1
例如,“你好”的“键”是8007006,8是“你好”的单词键,7是“你”,6是“你”。 同样,这个句子的“关键字类型”是12002001,12表示“疑问词”,2表示“动词”,1表示“代词”

这很好,模型可以实际读取特征并进行交叉验证。 不幸的是,由于这些键的制作方式,我最终在同一个数据集中得到了大量的数字,而不是很小的数字,我认为这会使模型失效

我尝试使用np.sigmoid进行规范化,但对于我的大多数键来说,这只是输出1(它们太大了)

所以我的问题是:有没有一种方法可以使这些键正常化,从而不破坏它们的用途?如果没有,您是否有更好的想法,知道如何将这些键提供给模型,而不丢失单个单词键的添加顺序


或者是需要神经网络的一种或几种情况?

用CSV文件来存储数据,不如用CSV文件来存储数据

Python标准库中提供了JSON(请参阅)。将数据存储为JSON将保留dict和list结构,并且非常容易使用。例如:

import json
original_sentence = {
    'key': ['a', 'b', 'c'],
}
result = json.dumps(original_sentence)  # '{"key": ["a", "b", "c"]}'
然后,当您需要使用数据时:

loaded_sentence = json.loads(result)
要显示返回的数据相同,请执行以下操作:

print(original_sentence == loaded_sentence)
您可以将JSON一次写入一行到输出文件中,也可以将结果做成一个列表,并将整个结果列表转储到一个JSON文件中

results = [sentence for sentence in sentences]
with open('output.json', 'w') as fp:
    json.dump(results, fp)  # notice .dump not .dumps

with open('output.json') as fp:
    results = json.load(fp)  # notice .load not .loads

注意:如果您有更复杂的对象,那么您可能需要使对象可序列化,但是如果您将它们存储在CSV中,这是非常不可能的。

谢谢,我会尝试一下。我转换为CSV的对象是一个PD数据帧。这行吗?如果我没弄错的话,PD数据帧已经有了
.to_json
.read_json
方法,所以你可以直接使用它们。我刚刚确认,熊猫数据帧确实有一个
.to_json
方法,但是
read_json
是熊猫的一部分,而不是具体的数据帧。因此,要创建json
data=df.to_json()
并还原它
pd.read_json(data)