使用带输入的字符串拆分为trainset和testset

时间:2017-09-18 07:08:20

标签: python prediction training-data

我在python的世界里真的很新。 我已经看到了一个在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做火车组,苹果价格0到测试集做一些预测。

我想用数据集来做,我必须输入我想要预测的内容

很抱歉,如果我没有解释清楚。

谢谢你的帮助,任何建议都会被贬低。

数据可能是这样的

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 输出想要成为培训后的价格。

再次感谢您的帮助!!!

2 个答案:

答案 0 :(得分:1)

为此使用pandas和numpy:

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     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

如果您想获取数据的第一列,请使用df[0],然后可以相应地访问第二列:df[1]。两者基本上都是numpy列表。有了这些数据,您就可以进行培训和测试。我希望这对你有所帮助。由于相当不明确的问题,这就是我所能做的。

答案 1 :(得分: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)