我选择了此数据集: https://www.kaggle.com/karangadiya/fifa19
现在,我想将此CSV文件转换为联合数据集以适合模型。
Tensorflow提供了有关联合学习的教程,其中他们使用了预定义的数据集。但是,我的问题是如何在联合学习方案中使用这个特定的数据集?
答案 0 :(得分:2)
我将使用其他CSV数据集,但这仍将解决此问题的核心,即如何从CSV创建联合数据集。我们还假设该数据集中有一列,您想代表数据的client_id
。
import pandas as pd
import tensorflow as tf
import tensorflow_federated as tff
csv_url = "https://docs.google.com/spreadsheets/d/1eJo2yOTVLPjcIbwe8qSQlFNpyMhYj-xVnNVUTAhwfNU/gviz/tq?tqx=out:csv"
df = pd.read_csv(csv_url, na_values=("?",))
client_id_colname = 'native.country' # the column that represents client ID
SHUFFLE_BUFFER = 1000
NUM_EPOCHS = 1
# split client id into train and test clients
client_ids = df[client_id_colname].unique()
train_client_ids = client_ids.sample(frac=0.5).tolist()
test_client_ids = [x for x in client_ids if x not in train_client_ids]
有几种方法可以执行此操作,但是我将在此处说明的方式使用tff.simulation.ClientData.from_clients_and_fn
,这要求我们编写一个接受client_id
作为输入并返回{{1 }}。我们可以轻松地从数据框中构造它。
tf.data.Dataset
现在,我们可以使用上面的功能为我们的训练和测试数据创建一个def create_tf_dataset_for_client_fn(client_id):
# a function which takes a client_id and returns a
# tf.data.Dataset for that client
client_data = df[df[client_id_colname] == client_id]
dataset = tf.data.Dataset.from_tensor_slices(client_data.to_dict('list'))
dataset = dataset.shuffle(SHUFFLE_BUFFER).batch(1).repeat(NUM_EPOCHS)
return dataset
对象:
ConcreteClientData
要查看数据集的一个实例,请尝试:
train_data = tff.simulation.ClientData.from_clients_and_fn(
client_ids=train_client_ids,
create_tf_dataset_for_client_fn=create_tf_dataset_for_client_fn
)
test_data = tff.simulation.ClientData.from_clients_and_fn(
client_ids=test_client_ids,
create_tf_dataset_for_client_fn=create_tf_dataset_for_client_fn
)
example_dataset = train_data.create_tf_dataset_for_client(
train_data.client_ids[0]
)
print(type(example_dataset))
example_element = iter(example_dataset).next()
print(example_element)
# <class 'tensorflow.python.data.ops.dataset_ops.RepeatDataset'>
# {'age': <tf.Tensor: shape=(1,), dtype=int32, numpy=array([37], dtype=int32)>, 'workclass': <tf.Tensor: shape=(1,), dtype=string, numpy=array([b'Local-gov'], dtype=object)>, ...
的每个元素都是Python字典,其中的键是表示要素名称的字符串,而值是带有一批这些要素的张量。现在,您可以对联邦数据集进行预处理并用于建模。
答案 1 :(得分:0)
您可以先从CSV文件创建h5文件,然后将CSV文件转换为联合数据。
背景 h5文件是一种显示元数据的层次结构文件结构,因为层次结构结构很好地表示了联合用户ID,因此效果很好
在创建使用客户端数据对象创建的联合数据时,客户端数据是使用h5文件实现的,
步骤
创建h5文件
with h5py.File("student31.h5", 'a') as hdf:
example = hdf.create_group("examples")
for i in range(0,20):
# for data in myDataFrame:
# localList.append(str(data))
# print(type(myDataFrame))
# data.append(myDataFrame)
exampleGroup = example.create_group(str(i))
# myClientGroup = hdf.create_group(str(i))
# d1 = np.random.random(size = (100,33))
print("printing the type ")
print(type(train[i][0]))
exampleGroup.create_dataset('x',data=train[i])
exampleGroup.create_dataset('y',data=dataY[i])
联合客户端数据实例化
myclient = HDF5ClientData("student31.h5")