Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将包含分类数据和连续数据的数据集放入DBSCAN中用户定义的度量函数中?_Python_Python 3.x_Cluster Analysis_Data Mining_Dbscan - Fatal编程技术网

Python 如何将包含分类数据和连续数据的数据集放入DBSCAN中用户定义的度量函数中?

Python 如何将包含分类数据和连续数据的数据集放入DBSCAN中用户定义的度量函数中?,python,python-3.x,cluster-analysis,data-mining,dbscan,Python,Python 3.x,Cluster Analysis,Data Mining,Dbscan,我有一个具有连续和分类值的数据集。我想在DBSCAN中编写一个函数作为度量,它使用相同的欧几里德距离作为连续值,并且为了处理分类值,它必须用其他字符串值标识整个字符串值。如果这两个值相等,则必须将距离设为0。如果这两个值不相等,则应生成一个距离作为结果。当我试图为metric编写用户定义的函数时,它根本不会将数据传递给我的函数。它抛出类似“无法将字符串转换为浮点:“'second'”的错误?有没有办法将数据传递给我的函数? 数据帧看起来像: sundar call r

我有一个具有连续和分类值的数据集。我想在DBSCAN中编写一个函数作为度量,它使用相同的欧几里德距离作为连续值,并且为了处理分类值,它必须用其他字符串值标识整个字符串值。如果这两个值相等,则必须将距离设为0。如果这两个值不相等,则应生成一个距离作为结果。当我试图为metric编写用户定义的函数时,它根本不会将数据传递给我的函数。它抛出类似“无法将字符串转换为浮点:“'second'”的错误?有没有办法将数据传递给我的函数?

数据帧看起来像:

        sundar call      raju   ram     sony  tintu  banti
points                                                    
x1         0.6  '0'   'first'  0.93   'lion'   0.34   0.98
x2         0.7  '1'  'second'  0.47    'cat'   0.43   0.76
x3         0.4  '0'   'third'  0.87  'tiger'   0.24   0.10
x4         0.6  '0'   'first'  0.93   'lion'   0.34   0.98
x5         0.5  '1'   'first'  0.32  'tiger'   0.09   0.99
x6         0.4  '0'   'third'  0.78  'tiger'   0.18   0.17
x7         0.5  '1'  'second'  0.98    'cat'   0.47   0.78 

我想您应该使用“预计算”指标初始化DBSCAN:

(省略其他参数)。然后计算所有样本之间的度量,得到shape
[n\u个样本,n\u个样本]
的矩阵

X = user_defined_metric(data, data)
然后使用此数据拟合DBSCAN:

labels = dbscan.fit_predict(X)
根据sklearn文件

fit_predict(X, y=None, sample_weight=None)

Performs clustering on X and returns cluster labels.
Parameters: 
X : array or sparse (CSR) matrix of shape (n_samples, n_features), or array of shape (n_samples, n_samples)
    A feature array, or array of distances between samples if metric='precomputed'.

第二种情况-形状数组
[n_样本,n_样本]
属于您。

但字符串数据没有传递到我的函数中(在您的情况下,它是用户定义的度量(数据,数据))。它抛出了另一个错误,即:输入包含NaN、无穷大或一个对dtype('float64')来说太大的值。@Vamshi您能否提供一个数据示例,即数据帧中的一行或两行,以及度量(代码)的定义?谢谢您的回复。我想我犯了一些错误,没有完全执行它。所以,当DBSCAN试图查找我尚未实现的距离矩阵并返回错误时。@Vamshi我很高兴知道它:)
fit_predict(X, y=None, sample_weight=None)

Performs clustering on X and returns cluster labels.
Parameters: 
X : array or sparse (CSR) matrix of shape (n_samples, n_features), or array of shape (n_samples, n_samples)
    A feature array, or array of distances between samples if metric='precomputed'.