当我们有数字和分类数据时,使用哪种算法来解决聚类问题?
Which algorithm to use for a clustering problem when we have numerical and categorical data?
我对聚类几乎是个新手,对使用的方法有点困惑。
我有一组建筑物,我想根据它们的能耗、大小、类型和邻域对它们进行聚类。我使用 k-means 方法和 "get_dummies" 方法来处理我的分类数据。
请问这样处理分类数据是否正确? (我也尝试简单地将它们映射到 1、2、3 等数字,并在聚类之前对它们进行归一化,但没有收到合适的结果)
如果您建议另一种算法(随机森林、svm 或其他任何算法),请提供 link 或网站供我学习,我将不胜感激。
另一个问题是,如果我想让我的一个特征对这个聚类有更大的影响,是否可以在归一化后乘以2然后运行聚类部分?
谢谢。
** "get_dummies" 是什么意思?
我想差不多就是这样了!使用标签编码器或单热编码将非数字转换为数字。
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder# creating initial dataframe
bridge_types = ('Arch','Beam','Truss','Cantilever','Tied Arch','Suspension','Cable')
bridge_df = pd.DataFrame(bridge_types, columns=['Bridge_Types'])# creating instance of labelencoder
labelencoder = LabelEncoder()# Assigning numerical values and storing in another column
bridge_df['Bridge_Types_Cat'] = labelencoder.fit_transform(bridge_df['Bridge_Types'])
bridge_df
结果:
Bridge_Types Bridge_Types_Cat
0 Arch 0
1 Beam 1
2 Truss 6
3 Cantilever 3
4 Tied Arch 5
5 Suspension 4
6 Cable 2
或者...
import pandas as pd
import numpy as np# creating initial dataframe
bridge_types = ('Arch','Beam','Truss','Cantilever','Tied Arch','Suspension','Cable')
bridge_df = pd.DataFrame(bridge_types, columns=['Bridge_Types'])# generate binary values using get_dummies
dum_df = pd.get_dummies(bridge_df, columns=["Bridge_Types"], prefix=["Type_is"] )# merge with main df bridge_df on key values
bridge_df = bridge_df.join(dum_df)
bridge_df
请记住,如果您有大量标签,那么在将所有内容都设为数字后,您的数据将会非常稀疏。另外,是的,您可以 'game it' 将一项功能加倍。这是基本示例。
import numpy as np
data = np.asarray([np.asarray(DF['Feature1']),np.asarray(DF['Feature1']),np.asarray(DF['Feature2'])])
这似乎有点奇怪,我在实践中从未这样做过,但它应该会给你想要的结果。你知道什么......测试它,看看你如何相处。最后,当您有空闲时间时,请通读下面 link 上的内容。你会从中学到很多东西 link。
我对聚类几乎是个新手,对使用的方法有点困惑。 我有一组建筑物,我想根据它们的能耗、大小、类型和邻域对它们进行聚类。我使用 k-means 方法和 "get_dummies" 方法来处理我的分类数据。
请问这样处理分类数据是否正确? (我也尝试简单地将它们映射到 1、2、3 等数字,并在聚类之前对它们进行归一化,但没有收到合适的结果) 如果您建议另一种算法(随机森林、svm 或其他任何算法),请提供 link 或网站供我学习,我将不胜感激。
另一个问题是,如果我想让我的一个特征对这个聚类有更大的影响,是否可以在归一化后乘以2然后运行聚类部分?
谢谢。
** "get_dummies" 是什么意思?
我想差不多就是这样了!使用标签编码器或单热编码将非数字转换为数字。
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder# creating initial dataframe
bridge_types = ('Arch','Beam','Truss','Cantilever','Tied Arch','Suspension','Cable')
bridge_df = pd.DataFrame(bridge_types, columns=['Bridge_Types'])# creating instance of labelencoder
labelencoder = LabelEncoder()# Assigning numerical values and storing in another column
bridge_df['Bridge_Types_Cat'] = labelencoder.fit_transform(bridge_df['Bridge_Types'])
bridge_df
结果:
Bridge_Types Bridge_Types_Cat
0 Arch 0
1 Beam 1
2 Truss 6
3 Cantilever 3
4 Tied Arch 5
5 Suspension 4
6 Cable 2
或者...
import pandas as pd
import numpy as np# creating initial dataframe
bridge_types = ('Arch','Beam','Truss','Cantilever','Tied Arch','Suspension','Cable')
bridge_df = pd.DataFrame(bridge_types, columns=['Bridge_Types'])# generate binary values using get_dummies
dum_df = pd.get_dummies(bridge_df, columns=["Bridge_Types"], prefix=["Type_is"] )# merge with main df bridge_df on key values
bridge_df = bridge_df.join(dum_df)
bridge_df
请记住,如果您有大量标签,那么在将所有内容都设为数字后,您的数据将会非常稀疏。另外,是的,您可以 'game it' 将一项功能加倍。这是基本示例。
import numpy as np
data = np.asarray([np.asarray(DF['Feature1']),np.asarray(DF['Feature1']),np.asarray(DF['Feature2'])])
这似乎有点奇怪,我在实践中从未这样做过,但它应该会给你想要的结果。你知道什么......测试它,看看你如何相处。最后,当您有空闲时间时,请通读下面 link 上的内容。你会从中学到很多东西 link。