【问题标题】:in learning data mining with python ch5 error在用python ch5错误学习数据挖掘
【发布时间】:2016-09-29 07:11:51
【问题描述】:

代码:

import os
import pandas as pd
data_folder = os.path.join(os.path.expanduser("~"),"data","Ads")
data_filename = os.path.join(data_folder,"ad.data")
def convert_number(x):
    try:
        return float(x)
    except ValueError:
        return np.nan
from collections import defaultdict
converters = defaultdict(convert_number)
converters[1558] = lambda x:1 if x.strip() == "ad." else 0
ads = pd.read_csv(data_filename,header=None,converters=converters)
ads[:5]
x = ads.drop(1558,axis=1).values
y = ads[1558]
from sklearn.decomposition import PCA
pca = PCA(n_components=5)
xd = pca.fit_transform(x)
import numpy as np
np.set_printoptions(precision=3,suppress=True)
pca.explained_variance_ratio_

错误:

ValueError                                Traceback (most recent call last)
<ipython-input-10-f726f2ff6f29> in <module>()
      1 from sklearn.decomposition import PCA
      2 pca = PCA(n_components=5)
----> 3 xd = pca.fit_transform(x)
      4 import numpy as np
      5 np.set_printoptions(precision=3,suppress=True)

/home/kongnian/anaconda3/lib/python3.5/site-packages/sklearn/decomposition/pca.py in fit_transform(self, X, y)
    239 
    240         """
--> 241         U, S, V = self._fit(X)
    242         U = U[:, :self.n_components_]
    243 

/home/kongnian/anaconda3/lib/python3.5/site-packages/sklearn/decomposition/pca.py in _fit(self, X)
    266             requested.
    267         """
--> 268         X = check_array(X)
    269         n_samples, n_features = X.shape
    270         X = as_float_array(X, copy=self.copy)

/home/kongnian/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    371                                       force_all_finite)
    372     else:
--> 373         array = np.array(array, dtype=dtype, order=order, copy=copy)
    374 
    375         if ensure_2d:

ValueError: could not convert string to float: '?'

数据集: http://archive.ics.uci.edu/ml/datasets/Internet+Advertisements 下载广告数据集 操作系统信息: Linux ubuntu 4.4.0-40-generic #60-Ubuntu SMP Fri Sep 23 16:45:45 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

【问题讨论】:

    标签: python


    【解决方案1】:

    您链接到的数据源包含 ? 符号 - 我认为这些是缺失值。我建议在从 csv 阶段读取时过滤它们,如下所示:

    ads = pd.read_csv(data_filename,header=None,converters=converters, na_values='?')
    

    您可以在pandas docs 中找到有关如何处理缺失值的更多信息

    【讨论】:

    • 添加 na_values='?',error: ValueError: could not convert string to float: ' ?'
    • 我相信这意味着你的数据集中有' ?'。参数na_values 也可以接受列表,因此请尝试以下操作:na_values = ['?', ' ?']
    猜你喜欢
    • 2011-11-22
    • 2011-04-11
    • 2010-12-22
    • 2017-03-20
    • 2011-03-25
    • 2011-10-29
    • 1970-01-01
    • 2021-12-09
    • 2010-10-28
    相关资源
    最近更新 更多