Python 數據分割函數

 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     
相關文章
相關標籤/搜索