gpt4 book ai didi

python - 如何将csv文件转换为字符级one-hot-encode矩阵?

转载 作者:行者123 更新时间:2023-12-04 13:24:39 29 4
gpt4 key购买 nike

我有一个像这样的 CSV 文件
database.csv
我想选择最后一列并使每个序列的字符级单热编码矩阵,我使用此代码但它不起作用

data = pd.read_csv('database.csv', usecols=[4])
alphabet = ['A', 'C', 'D', 'E', 'F', 'G','H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y']
charto = dict((c,i) for i,c in enumerate(alphabet))
iint = [charto[char] for char in data]
onehot2 = []
for s in iint:
lett = [0 for _ in range(len(alphabet))]
lett[s] = 1
onehot2.append(lett)
你建议为这个任务做什么?
(顺便说一句,我想将此数据集用于 PyTorch 模型)

最佳答案

我认为最好保留pd.DataFrame原样并在 PyTorch 数据集中“即时”进行转换。
首先,类似于你的虚拟数据:

df = pd.DataFrame(
{
"ID": [1, 2, 3],
"Source": ["Serbia", "Poland", "Germany"],
"Sequence": ["ABCDE", "EBCDA", "AAD"],
}
)
之后,我们可以创建 torch.utils.data.Dataset类(显示了示例字母表,您可以将其更改为您想要的任何内容):
class Dataset(torch.utils.data.Dataset):
def __init__(self, df: pd.DataFrame):
self.df = df
# Change alphabet to anything you need
alphabet = ["A", "B", "C", "D", "E", "F"]
self.mapping = dict((c, i) for i, c in enumerate(alphabet))

def __getitem__(self, index):
sample = df.iloc[index]
sequence = sample["Sequence"]
target = torch.nn.functional.one_hot(
torch.tensor([self.mapping[letter] for letter in sequence]),
num_classes=len(self.mapping),
)
return sample.drop("Sequence"), target

def __len__(self):
return len(self.df)
此代码只是通过 torch.nn.functional.one_hot 将字母索引转换为它们的单热编码。功能。
用法非常简单:
ds = Dataset(df)
ds[0]
它返回(您可能想要更改样本的创建方式,因为我不确定格式并且只关注热编码目标)以下目标( IDSource 省略):
tensor([ [1., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 1., 0.]]))

关于python - 如何将csv文件转换为字符级one-hot-encode矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69286139/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com