К сожалению, этот вопрос будет дублироваться, но я не смог исправить проблему в своем коде, даже после просмотра других подобных вопросов и связанных с ними ответов. Мне нужно разделить мой набор данных на поезд, тест и набор данных. Однако, похоже, я делаю какую-то ошибку, когда добавляю новый столбец для прогнозирования кластера. Ошибка, которую я получаю:
/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
This is separate from the ipykernel package so we can avoid doing imports until
Есть несколько вопросов по этой ошибке, но, вероятно, я делаю что-то не так, так как я еще не исправил проблему и все еще получаю ту же ошибку, что и выше. Набор данных следующий:
Date Link Value
0 03/15/2020 https://www.bbc.com 1
1 03/15/2020 https://www.netflix.com 4
2 03/15/2020 https://www.google.com 10
...
Я разделил набор данных на обучающие и тестовые наборы следующим образом:
import sklearn
from sklearn.model_selection import cross_validate
from sklearn.model_selection import train_test_split
import re
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
import nltk
import string as st
train_data=df.Link.tolist()
df_train=pd.DataFrame(train_data, columns = ['Review'])
X = df_train
X_train, X_test = train_test_split(
X, test_size=0.4).copy()
X_test, X_val = train_test_split(
X_test, test_size=0.5).copy()
print(X_train.isna().sum())
print(X_test.isna().sum())
stop_words = stopwords.words('english')
def preprocessor(t):
t = re.sub(r"[^a-zA-Z]", " ", t())
words = word_tokenize(t)
w_lemm = [WordNetLemmatizer().lemmatize(w) for w in words if w not in stop_words]
return w_lemm
vect =TfidfVectorizer(tokenizer= preprocessor)
vectorized_text=vect.fit_transform(X_train['Review'])
kmeans =KMeans(n_clusters=3).fit(vectorized_text)
Строки кода, вызывающие ошибку:
cl=kmeans.predict(vectorized_text)
X_train['Cluster']=pd.Series(cl, index=X_train.index)
Я думаю, что эти два вопроса должны были помочь мне с кодом:
Как добавить прогнозируемые кластеры k-средних в столбец к фрейму данных в Python
Как бороться с SettingWithCopyWarning в Pandas?
но что-то все еще продолжает быть не так в моем коде.
Не могли бы вы взглянуть на него и помочь мне решить эту проблему, прежде чем закрывать этот вопрос как дубликат?