当前位置: 首页 > 面试题库 >

在scikit-learn中估算分类缺失值

谷梁涵忍
2023-03-14
问题内容

我有一些文本类型的列的熊猫数据。这些文本列中包含一些NaN值。我想做的是通过sklearn.preprocessing.Imputer(用最常用的值替换NaN
)来估算那些NaN 。问题在于实施。假设有一个具有30列的Pandas数据框df,其中10列属于分类性质。一旦我运行:

from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='most_frequent', axis=0)
imp.fit(df)

Python会生成一个error: 'could not convert string to float: 'run1'',其中’run1’是带有分类数据的第一列中的普通(不丢失)值。

任何帮助将非常欢迎


问题答案:

要将平均值用于数字列,将最频繁的值用于非数字列,您可以执行以下操作。您可以进一步区分整数和浮点数。我想用中位数代替整数列可能有意义。

import pandas as pd
import numpy as np

from sklearn.base import TransformerMixin

class DataFrameImputer(TransformerMixin):

    def __init__(self):
        """Impute missing values.

        Columns of dtype object are imputed with the most frequent value 
        in column.

        Columns of other types are imputed with mean of column.

        """
    def fit(self, X, y=None):

        self.fill = pd.Series([X[c].value_counts().index[0]
            if X[c].dtype == np.dtype('O') else X[c].mean() for c in X],
            index=X.columns)

        return self

    def transform(self, X, y=None):
        return X.fillna(self.fill)

data = [
    ['a', 1, 2],
    ['b', 1, 1],
    ['b', 2, 2],
    [np.nan, np.nan, np.nan]
]

X = pd.DataFrame(data)
xt = DataFrameImputer().fit_transform(X)

print('before...')
print(X)
print('after...')
print(xt)

哪个打印,

before...
     0   1   2
0    a   1   2
1    b   1   1
2    b   2   2
3  NaN NaN NaN
after...
   0         1         2
0  a  1.000000  2.000000
1  b  1.000000  1.000000
2  b  2.000000  2.000000
3  b  1.333333  1.666667


 类似资料:
  • 问题内容: 问题是如何用熊猫数据框中类别列的最频繁级别填充NaN? 在R randomForest软件包中,有 na.roughfix选项: 在熊猫中使用数字变量,我可以用以下内容填充NaN值: 问题答案: 您可以使用一栏中最频繁的值来填充NaN。 如果要用自己的最常用值填充每一列,则可以使用 更新 2018-25-10⬇ 从熊猫开始,包括用于Series和Dataframe的方法。您可以使用它来

  • K-means k是一个超参数,表示要聚类成多少类。K-means计算方法是重复移动类的重心,以实现成本函数最小化,成本函数为: 其中μk是第k类的重心位置 试验 构造一些样本用户试验,如下: # coding:utf-8 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) import matplotlib.pyplot as pl

  • scikit-learn 是一个 Python 的机器学习项目。是一个简单高效的数据挖掘和数据分析工具。基于 NumPy、SciPy 和 matplotlib 构建。 Installation 依赖 scikit-learn 要求: Python (>= 2.7 or >= 3.3) NumPy (>= 1.8.2) SciPy (>= 0.13.3) 运行示例需要 Matplotlib >= 1

  • 我如何将与此等价的东西传递给scikit-learn分类器,如随机森林或SVM分类器?

  • Introduction to Machine Learning with scikit-learn This video series will teach you how to solve Machine Learning problems using Python's popular scikit-learn library. There are 10 video tutorials tot

  • 问题内容: 我有一个使用Python的scikit- learn训练的分类器。如何使用Java程序中的分类器?我可以使用Jython吗?有什么方法可以在Python中保存分类器并在Java中加载分类器?还有其他使用方式吗? 问题答案: 您不能使用jython,因为scikit- learn非常依赖numpy和scipy,它们具有许多已编译的C和Fortran扩展,因此无法在jython中工作。 在