一个k在结构化数据中的多个列中意味着如何?
在下面的示例中,已在1列(名称)
上完成tfidf_matrix = tfidf_vectorizer.fit_transform(df_new ['name'])
在这里只使用名称,但说我们想使用名称和国家,我应该将国家添加到同一列中吗?
df_new['name'] = df_new['name'] + " " + df_new['country']
tfidf_matrix = tfidf_vectorizer.fit_transform(df_new['name'])
它从代码的角度起作用,并且仍在尝试理解结果(我实际上有大量列)数据,但我想知道当有多个列时,这是否是正确的合适方法
import os
import pandas as pd
import re
import numpy as np
df = pd.read_csv('sample-data.csv')
def split_description(string):
# name
string_split = string.split(' - ',1)
name = string_split[0]
return name
df_new = pd.DataFrame()
df_new['name'] = df.loc[:,'description'].apply(lambda x: split_description(x))
df_new['id'] = df['id']
def remove(name):
new_name = re.sub("[0-9]", '', name)
new_name = ' '.join(new_name.split())
return new_name
df_new['name'] = df_new.loc[:,'name'].apply(lambda x: remove(x))
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(
use_idf=True,
stop_words = 'english',
ngram_range=(1,4), min_df = 0.01, max_df = 0.8)
tfidf_matrix = tfidf_vectorizer.fit_transform(df_new['name'])
print (tfidf_matrix.shape)
print (tfidf_vectorizer.get_feature_names())
from sklearn.metrics.pairwise import cosine_similarity
dist = 1.0 - cosine_similarity(tfidf_matrix)
print (dist)
from sklearn.cluster import KMeans
num_clusters = range(1,20)
KM = [KMeans(n_clusters=k, random_state = 1).fit(tfidf_matrix) for k in num_clusters]
no,这是适合多个列的不正确方法。基本上,您只是简单地将多个功能列入在一起,并期望它的行为正确,就好像Kmeans被应用于这些多个列作为单独的功能一样。
您需要使用其他方法(例如矢量器和管道)以及tfidifvectorizor在多列上进行此操作。您可以查看此链接以获取更多信息。
此外,您可以查看此答案,以获取有关问题的替代解决方案。