Python 数据分割函数

时间:2024-03-11 20:39:17
 1     
 2 def split_data(data, prob): 
 3     """分割数据
 4     split data into fractions [prob, 1 - prob]""" 
 5     results = [], [] 
 6     for row in data:  
 7         """
 8         这里对数据的迭代是有序的
 9         但是数据被放在测试集和训练集的可能性是随机的
10         """
11         results[0 if random.random() < prob else 1].append(row)  
12         """
13         用random.random()产生随机数字然后与分割的概率比较大小 这样就保证了数据是被随机的分配到不同的set中的。
14         results 是有两个列表组成的,当random.random() 的结果小于 分割概率时,就为results[0]添加元素。否则就为results[1]添加元素。 
15         
16         这样的写法真是巧妙,
17         使用random.random()首先保证了随机分配,
18         与0或1比较大小来进行分配十分方便,
19         而同时0或1 又可以直接当做results 的索引来为不同的集合添加元素。
20         
21         可谓是一举多得。Nice!!!
22         """
23     return results
24 
25 def train_test_split(x,y,test_pct):
26     data = zip(x,y)                            # 使用zip()函数将传入的x,y数据合成为一组成对的数据
27     """【x,y】 x,y本身就是列表所以data 为[[x_ele],[y_ele]] """
28     train,test = split_data(data,1 - test_pct) # 然后调用分割函数 进行随机分割
29     """对data进行分割,分割后的数据与data是相同形状的"""
30     x_train, y_train = zip(*train)             # 魔法般的解压技巧
31     """ 使用zip()函数对上一步的数据进行解压,再次分割为x,y数据集"""
32     x_test, y_test = zip(*test)                
33     return x_train,x_test,y_train,y_test       #最后返回x,y的测试集和训练集 共四个组数据
34