将分类数据从用户输入映射到其实际编码值以进行预测
Mapping categorical data from user input to its actual encoded value for prediction
我的数据集的一部分看起来像这样(我的实际数据中还有许多其他处理器类型)
df.head(4)
Processor Task Difficulty Time
i3 34 3 6
i7 34 3 4
i3 50 1 6
i5 25 2 5
我创建了一个回归模型来预测 Time
当 Type, Task
是 Difficulty
作为输入时。
我先做了 label encoding
来改变 Processor
这是绝对的。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['Processor'] = le.fit_transform(df['Processor'])
df.head(4)
Processor Task Difficulty Time
12 34 3 6
8 34 3 4
12 50 1 6
2 25 2 5
这是我的回归模型
from sklearn.ensemble import RandomForestRegressor
rf_model = RandomForestRegressor(random_state = 1)
rf_model.fit(features,target)
我想为输入 "i5", 20, 1
预测 Time
。
如何对 "i5"
进行标签编码以将其映射以获得与 i5
编码为 2
的编码数据帧中相同的值?
我试过了
rf_model.predict([[le.fit_transform('i5'),20,1]])
然而,当 i5 输入为 2 时,我得到的输出预测与实际值不同,
rf_model.predict([[2,20,1)]])
你可以这样试试
print(le.fit_transform(['i5']))
# [2]
它不起作用,因为您正在使用 fit_transform
。这会重新分配类别而不是使用现有编码,因此如果您这样做 le.transform
它应该可以工作。例如,类似于您的数据:
np.random.seed(111)
df = pd.DataFrame({'Processor':np.random.choice(['i3','i5','i7'],50),
'Task':np.random.randint(25,50,50),
'Difficulty':np.random.randint(1,4,50),
'Time':np.random.randint(1,7,50)})
我们制作目标和特征,然后拟合:
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
features = df.iloc[:,:3]
features['Processor'] = le.fit_transform(features['Processor'])
target = df['Time']
from sklearn.ensemble import RandomForestRegressor
rf_model = RandomForestRegressor(random_state = 1)
rf_model.fit(features,target)
'i5' 将是 1:
le.classes_
array(['i3', 'i5', 'i7'], dtype=object)
检查预测:
rf_model.predict([[le.transform(['i5']),20,1]])
array([3.975])
并且:
rf_model.predict([[1,20,1]])
array([3.975])
我的数据集的一部分看起来像这样(我的实际数据中还有许多其他处理器类型)
df.head(4)
Processor Task Difficulty Time
i3 34 3 6
i7 34 3 4
i3 50 1 6
i5 25 2 5
我创建了一个回归模型来预测 Time
当 Type, Task
是 Difficulty
作为输入时。
我先做了 label encoding
来改变 Processor
这是绝对的。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['Processor'] = le.fit_transform(df['Processor'])
df.head(4)
Processor Task Difficulty Time
12 34 3 6
8 34 3 4
12 50 1 6
2 25 2 5
这是我的回归模型
from sklearn.ensemble import RandomForestRegressor
rf_model = RandomForestRegressor(random_state = 1)
rf_model.fit(features,target)
我想为输入 "i5", 20, 1
预测 Time
。
如何对 "i5"
进行标签编码以将其映射以获得与 i5
编码为 2
的编码数据帧中相同的值?
我试过了
rf_model.predict([[le.fit_transform('i5'),20,1]])
然而,当 i5 输入为 2 时,我得到的输出预测与实际值不同,
rf_model.predict([[2,20,1)]])
你可以这样试试
print(le.fit_transform(['i5']))
# [2]
它不起作用,因为您正在使用 fit_transform
。这会重新分配类别而不是使用现有编码,因此如果您这样做 le.transform
它应该可以工作。例如,类似于您的数据:
np.random.seed(111)
df = pd.DataFrame({'Processor':np.random.choice(['i3','i5','i7'],50),
'Task':np.random.randint(25,50,50),
'Difficulty':np.random.randint(1,4,50),
'Time':np.random.randint(1,7,50)})
我们制作目标和特征,然后拟合:
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
features = df.iloc[:,:3]
features['Processor'] = le.fit_transform(features['Processor'])
target = df['Time']
from sklearn.ensemble import RandomForestRegressor
rf_model = RandomForestRegressor(random_state = 1)
rf_model.fit(features,target)
'i5' 将是 1:
le.classes_
array(['i3', 'i5', 'i7'], dtype=object)
检查预测:
rf_model.predict([[le.transform(['i5']),20,1]])
array([3.975])
并且:
rf_model.predict([[1,20,1]])
array([3.975])