2017-09-18 40 views
1

我真的是python世界的新手。 我已经看到了在trainset和testset中分裂的例子。但仅限于数字类型。例如:用输入的字符串分割成trainset和testset

import random 

with open("datafile.txt", "rb") as f: 
    data = f.read().split('\n') 

random.shuffle(data) 

train_data = data[:50] 
test_data = data[50:] 

所以我想要做的是将数据分成训练或测试集由一个常规/相对表达。用输入来做。想象一下,我有一列所有的水果,另一个与他的体重,另一个与他的价格,但有些没有价格。我想分解数据,例如价格大于0的苹果做trainset,价格为0的苹果到测试集做一些预测。

,我想这样做,有一个数据集,我已经输入什么,我想预测

很抱歉,如果我不解释它做好。

并感谢您的帮助,任何建议将是apreciated。

的数据可能是这样的

Fruits  Weight Price 
Apple  5   1 
Apple  3   0.6 
Apple  3   0 
Banana  5   10 
Banana  4   8 
Banana  2   0 
Orange  10  20 
Orange  5   12 
Orange  2   0 
Kiwi  5   6 
Kiwi  5   6 
Kiwi  2   0 

然后我想喜欢水果输入:苹果,重量:10 和输出希望的价格做训练。

再次感谢您的帮助!

import pandas as pd 
import numpy as np 

df = pd.read_table('datafile.txt', sep='\s+', header=None) 
df.fillna(0, inplace=True) 
print(df) 


print(df.reindex(np.random.permutation(df.index))) 

第一print的输出是:

+0

学习numpy的和布尔索引 –

+0

*如果我不解释很好* - 它会更好,如果你张贴的输入采样和最终预期输出 – RomanPerekhrest

回答

1

对于和numpy的使用熊猫

 0  1 
0 apple 10.0 
1 banana 4.0 
2 orange 2.0 
3 peach 0.0 

使用numpy的的permutation功能后,DataFrame看起来是这样的:

 0  1 
2 orange 2.0 
0 apple 10.0 
1 banana 4.0 
3 peach 0.0 

如果你想获得第一个柱子n的数据,使用df[0],第二列可以相应访问:df[1]。两者基本上都是numpy列表。有了这些数据,你可以做你的训练和测试的事情。我希望这对你有所帮助。由于相当不确定的问题,这是我所能做的。

0

你说你想要分割数据来做出预测,根据一个逻辑,其中火车集的水果价格> 0,而测试集的水果价格为0。如果你试图建立任何预测模型,我强烈建议反对,因为你的模型会有预测偏差。

例如,如果你用这个逻辑训练逻辑回归模型,你总是会高估测试集中的价格,因为你的训练集只有正值。训练和测试集应该对所有类具有相等的边际概率。

这就是说,在你想要分裂的数据集结束后,你可以尝试sklearn.train_test_split分裂。例如

import numpy as np 
from sklearn.model_selection import train_test_split 

#Create 5x4 table with the last column to be regarded as target value 
data = np.arange(20).reshape(5, 4) 

#Split into training/test for features(X) and target variable(y) 
X_train, X_test, y_train, y_test = train_test_split(data[:,0:3], 
data[:,3], test_size=0.33, random_state=42)