【问题标题】:How to transform new input data using dictVectorize and using the model?如何使用 dictVectorize 和模型转换新的输入数据?
【发布时间】:2015-11-20 16:48:05
【问题描述】:

我正在使用 dict vectorize 将我的分类变量转换为稀疏矩阵。然后使用逻辑回归和随机森林来训练模型。我的问题是,下次有新数据进来时,如何将其转换为稀疏矩阵框架,然后使用训练好的模型进行预测?

这是我的代码示例:

dv_x, y = dictVectorizeData(inputData, header)
# dv_x is a <740051x1112 sparse matrix of type '<type 'numpy.float64'>'
# with 9620663 stored elements in Compressed Sparse Row format>

lr_cv = LogisticRegressionCV(penalty='l1', solver='liblinear', Cs=[10**i for i in range(-4,2)], cv=5, refit=True)
lr_cv.fit(dv_X, Y)

现在有一个新数据,格式如下:

{
    'banner_position': '0',
    'connspeed': 'broadband',
    'creative_format': '728x90',
    'creative_id': '4688677',
    'day_hour_etc': '1',
    'domain': 'cdn.bitmedianetwork.com',
    'exch': 'cox',
    'home_bus': 'business',
    'is_mobile': 'non-mobile',
    'os_family': 'windows',
    'os_major': '8',
    'ua_family': 'ie',
    'ua_major': '9'
}

【问题讨论】:

    标签: python scikit-learn sparse-matrix


    【解决方案1】:

    我假设dictVectorizeData 是您定义的调用sklearn.feature_extraction.DictVectorizer 的函数。要转换新数据,您需要访问此 DictVectorizer 实例。

    例如:

    from sklearn.feature_extraction import DictVectorizer
    vec = DictVectorizer()
    X = vec.fit_transform(input_data)
    
    from sklearn.linear_model import LogisticRegressionCV
    lr_cv = LogisticRegressionCV()
    lr_cv.fit(X, y_input)
    
    X_new = vec.transform(new_data)
    y_new = lr_cv.predict(X_new)
    

    因为总是必须手动转换输入有点乏味,所以创建pipeline 来自动执行此操作通常更容易:

    from sklearn.pipeline import make_pipeline
    pipe = make_pipeline(DictVectorizer(), LogisticRegressionCV())
    pipe.fit(input_data, y_input)
    y_new = pipe.predict(new_data)
    

    这里的y_new结果与第一个代码块中的结果等价。

    【讨论】:

      猜你喜欢
      • 2019-11-08
      • 2020-03-13
      • 2020-10-05
      • 1970-01-01
      • 2022-01-23
      • 2017-08-25
      • 1970-01-01
      • 2023-03-03
      • 2013-09-11
      相关资源
      最近更新 更多