DBSCAN 返回 TypeError:无效的类型提升

Posted

技术标签:

【中文标题】DBSCAN 返回 TypeError:无效的类型提升【英文标题】:DBSCAN returns TypeError: invalid type promotion 【发布时间】:2021-06-29 02:57:12 【问题描述】:

您好,我有一个看起来像这样的数据框。当我尝试运行 dbscan 来搜索异常值或异常时

"model = DBSCAN(eps = 0.4, min_samples = 5).fit(dataframe)"

它返回这个错误

“TypeError:无效的类型提升”

有没有办法解决这个问题?

    DateTime            Values
0   2020-12-18 15:44:00 554.0
1   2020-12-18 15:57:00 594.0
2   2020-12-18 15:58:00 513.0
3   2020-12-18 16:09:00 576.0
4   2020-12-18 16:10:00 654.0
... ... ...
881 2020-12-27 13:55:00 484.0
882 2020-12-27 14:09:00 491.0
883 2020-12-27 15:17:00 512.0
884 2020-12-27 15:54:00 529.0
885 2020-12-27 17:03:00 436.0

【问题讨论】:

我注意到只有当我有一个时间序列列(即日期时间)时才会出现此错误。 【参考方案1】:

这是一个使用 DBSCAN 查找泰坦尼克号数据集中异常值的示例。

import seaborn as sns
import pandas as pd
titanic = sns.load_dataset('titanic')
titanic = titanic.copy()
titanic = titanic.dropna()
titanic['age'].plot.hist(
  bins = 50,
  title = "Histogram of the age variable"
)

 
from scipy.stats import zscore
titanic["age_zscore"] = zscore(titanic["age"])
titanic["is_outlier"] = titanic["age_zscore"].apply(
  lambda x: x <= -2.5 or x >= 2.5
)
titanic[titanic["is_outlier"]]

ageAndFare = titanic[["age", "fare"]]
ageAndFare.plot.scatter(x = "age", y = "fare")

 
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
ageAndFare = scaler.fit_transform(ageAndFare)
ageAndFare = pd.DataFrame(ageAndFare, columns = ["age", "fare"])
ageAndFare.plot.scatter(x = "age", y = "fare")

 
from sklearn.cluster import DBSCAN
outlier_detection = DBSCAN(
  eps = 0.5,
  metric="euclidean",
  min_samples = 3,
  n_jobs = -1)
clusters = outlier_detection.fit_predict(ageAndFare)

clusters

from matplotlib import cm
cmap = cm.get_cmap('Accent')
ageAndFare.plot.scatter(
  x = "age",
  y = "fare",
  c = clusters,
  cmap = cmap,
  colorbar = False
)

顶部中心的两个点是两个异常值,它们以绿色突出显示。

【讨论】:

您好,非常感谢。但只是导致“TypeError:无效类型提升”的问题是由于我的日期时间列,其中对象类型为 datetime64ns,我不确定它为什么会触发错误。 datetime64ns 的数据类型听起来不错。您可以删除该字段并重新运行该过程吗?也许该领域存在某种异常情况。也许某些东西是 NAN 或者你有一些负值。也许你在那个领域有一个奇怪的角色。尝试对字段进行升序和降序排序,看看你看到了什么。然后,重新运行该过程。有时,这些事情需要反复试验。

以上是关于DBSCAN 返回 TypeError:无效的类型提升的主要内容,如果未能解决你的问题,请参考以下文章

Python - 线性回归 TypeError:无效的类型提升

TypeError:Fetch 参数 None 的类型无效 <type 'NoneType'>

Tensorflow TypeError:获取参数None的类型无效<type'NoneType'>?

TypeError:获取参数数组的类型无效 numpy.ndarray,必须是字符串或张量。 (不能将 ndarray 转换为张量或操作。)

PySpark向现有DataFrame添加列 - TypeError:无效参数,不是字符串或列

显示获取的数据问题:对象作为 React 子项/类型错误无效:未定义