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 转换为张量或操作。)