相关疑难解决方法(0)

sklearn LabelEncoder和pd.get_dummies有什么区别?

我想知道sklearn LabelEncoder和pandas get_dummies之间的区别.为什么选择LabelEncoder而不是get_dummies.使用一个在另一个上的优势是什么?缺点是什么?

据我所知,如果我有A级

ClassA = ["Apple", "Ball", "Cat"]
encoder = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

dummy = [001, 010, 100]
Run Code Online (Sandbox Code Playgroud)

我不正确地理解这个吗?

python pandas scikit-learn

12
推荐指数
2
解决办法
8481
查看次数

管道中的虚拟创建与列车和测试集中的不同级别

我正在探索scikit学习管道.我还想用管道预处理数据.但是,我的列车和测试数据具有不同级别的分类变量.示例:考虑:

import pandas as pd
train = pd.Series(list('abbaa'))
test = pd.Series(list('abcd'))
Run Code Online (Sandbox Code Playgroud)

我用pandas写了一个TransformerMixinClass

class CreateDummies(TransformerMixin):

def transform(self, X, **transformparams):
    return pd.get_dummies(X).copy()

def fit(self, X, y=None, **fitparams):
    return self
Run Code Online (Sandbox Code Playgroud)

fit_transform产生列车数据2列和测试数据4列.所以这并不奇怪,但不适合管道

同样,我试图导入标签编码器(和OneHotEncoder用于潜在的后续步骤):

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
le = LabelEncoder()
le.fit_transform(train)
le.transform(test)
Run Code Online (Sandbox Code Playgroud)

这并不奇怪,这会产生错误.

所以这里的问题是我需要测试集中包含的一些信息.有没有一种好方法将其包含在管道中?

python pandas scikit-learn

9
推荐指数
1
解决办法
4125
查看次数

我们能否通过接受(或忽略)新功能使 ML 模型(pickle 文件)更加健壮?

  • 我训练了一个 ML 模型,并将其存储到 Pickle 文件中。
  • 在我的新脚本中,我正在阅读新的“真实世界数据”,我想对其进行预测。

然而,我正在挣扎。我有一列(包含字符串值),例如:

Sex       
Male       
Female
# This is just as example, in real it is having much more unique values
Run Code Online (Sandbox Code Playgroud)

现在问题来了。我收到了一个新的(唯一的)值,现在我无法再进行预测(例如'Neutral'添加了)。

由于我正在将'Sex'列转换为 Dummies,我确实遇到了我的模型不再接受输入的问题,

模型的特征数量必须与输入匹配。模型 n_features 为 2,输入 n_features 为 3

因此我的问题是:有没有办法让我的模型健壮,而忽略这个类?但是在没有具体信息的情况下进行预测?

我尝试过的:

df = pd.read_csv('dataset_that_i_want_to_predict.csv')
model = pickle.load(open("model_trained.sav", 'rb'))

# I have an 'example_df' containing just 1 row of training data (this is exactly what the model needs)
example_df = pd.read_csv('reading_one_row_of_trainings_data.csv')

# Checking for missing columns, and adding that to …
Run Code Online (Sandbox Code Playgroud)

python machine-learning pickle pandas scikit-learn

6
推荐指数
1
解决办法
354
查看次数

如何保存data.frame-to-model.matrix的映射并将其应用于新观察值?

一些建模功能,例如glmnet(),要求(或仅允许)将数据作为预测器矩阵和响应矩阵(或向量)传递,如使用公式所示。在这些情况下,通常情况是该predict()方法(例如predict.glmnet())要求newdata参数提供一个预测器矩阵,该矩阵具有与训练模型相同的特征。

当数据框具有因子(R的分类数据类型)时,创建预测变量矩阵的便捷方法是使用该model.matrix()函数,该函数会自动为分类变量创建虚拟特征:

# this is the dataframe and matrix I want to use to train the model
set.seed(1)
df <- data.frame(x1 = factor(sample(LETTERS[1:5], replace = T, 20)),
                 x2 = rnorm(20, 100, 5),
                 x3 = factor(sample(c("U","L"), replace = T, 20)),
                 y = rnorm(20, 10, 2))

mm <- model.matrix(y~., data = df)
Run Code Online (Sandbox Code Playgroud)

但是,当我引入一个带有新观察结果的数据框时,它仅包含原始数据框中因子水平的一个子集,model.matrix()(可预测地)返回一个具有不同虚拟特征的矩阵。无法使用此新矩阵,predict.glm()因为它没有模型期望的相同功能:

# this is the dataframe and matrix I want to predict on
set.seed(1) …
Run Code Online (Sandbox Code Playgroud)

r matrix prediction dataframe dummy-variable

3
推荐指数
1
解决办法
1432
查看次数