Итак, я пытался классифицировать популярность песни, основываясь на ее текстах и других параметрах, таких как темп и т. Д. Теперь вот фрагмент кода, который я пытаюсь запустить через tkinter.
import pandas as pd
from sklearn_pandas import DataFrameMapper
from sklearn.feature_extraction.text import TfidfTransformer, TfidfVectorizer,CountVectorizer
df = pd.read_csv(r'Dataset(Advanced)(processed lyrics).csv')
df['Lyrics'] = df['Lyrics'].astype(str)
mapper = DataFrameMapper([('Lyrics', CountVectorizer()),
('Tempo', None),
('Energy', None),
('Loudness', None),
('Danceability', None),
('Speechiness', None),
('Acousticness', None),
('Artist Hit', None)
])
features = mapper.fit_transform(df[['Lyrics', 'Tempo', 'Energy', 'Loudness', 'Danceability', 'Speechiness'
, 'Acousticness', 'Artist Hit']])
y = df['Hit']
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()
model.fit(features, y)
Теперь эту функцию я вызываю, когда нажимаю на кнопку. Здесь я беру все значения, такие как текст песни, темп и т. Д. Для песни, и преобразую ее в атрибут dataframe, чтобы он поместился в DataFrameMapper. Хотя все это выглядит хорошо,
def predict():
user_Lyrics = lyricsTextBox2.get(1.0, "end-1c")
user_Lyrics = user_Lyrics.values.astype(str)
print(user_Lyrics.head())
print(type(user_Lyrics))
# Everything in lowercase
user_Lyrics = user_Lyrics.apply(lambda x: " ".join(x.lower() for x in str(x).split()))
# Removing punctuation that does not add meaning to the song
user_Lyrics = user_Lyrics.str.replace('[^\w\s]', '')
# Removing of stop words
from nltk.corpus import stopwords
stop = stopwords.words('english')
user_Lyrics = user_Lyrics.apply(lambda x: " ".join(x for x in str(x).split() if x not in stop))
# Correction of Spelling mistakes
from textblob import TextBlob
user_Lyrics = user_Lyrics.apply(lambda x: str(TextBlob(x).correct()))
# Lemmatization is basically converting a word into its root word. It is preferred over Stemming.
from textblob import Word
user_Lyrics = user_Lyrics.apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
df['AP'] = float(ArtistPopularityEntry.get())
df['SE'] = float(EnergyEntry.get())
df['SL'] = float(LoudnessEntry.get())
df['SA'] = float(AcousticnessEntry.get())
df['ST'] = float(TempoEntry.get())
df['SD'] = float(DanceabilityEntry.get())
df['SS'] = float(SpeechinessEntry.get())
mapper2 = DataFrameMapper([
('Lyrics_User', CountVectorizer()),
('ST', None),
('SE', None),
('SL', None),
('SD', None),
('SS', None),
('SA', None),
('AP', None)
])
features2 = mapper2.fit_transform(df[['Lyrics_User', 'ST', 'SE', 'SL', 'SD', 'SS', 'SA', 'AP']])
print(type(features2))
print(len(features2))
print(features2.shape)
print(type(features))
print(len(features))
print(features.shape)
user_prediction = model.predict(features2)
print(user_prediction)
if (user_prediction[0] == 1):
resultLabel2.config(text='Song is Hit')
else:
resultLabel2.config(text='Song is not Hit')
Выход:
<class 'numpy.ndarray'>
831
(831, 18)
<class 'numpy.ndarray'>
831
(831, 1629)
Error:
Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\moksh\Anaconda3\lib\tkinter\__init__.py", line 1702, in
__call__
return self.func(*args) File "<ipython-input-4-f6ddab248363>",
line 69, in predict
user_prediction = model.predict(features2) File
"C:\Users\moksh\Anaconda3\lib\site-packages\sklearn\naive_bayes.py", line
66, in predict
jll = self._joint_log_likelihood(X) File
"C:\Users\moksh\Anaconda3\lib\site-packages\sklearn\naive_bayes.py", line
725, in _joint_log_likelihood
return (safe_sparse_dot(X, self.feature_log_prob_.T) + File
"C:\Users\moksh\Anaconda3\lib\site-packages\sklearn\utils\extmath.py",
line 140, in safe_sparse_dot
return np.dot(a, b) ValueError: shapes (831,18) and (1629,2) not
aligned: 18 (dim 1) != 1629 (dim 0)
EDIT
df['AP'] = float(ArtistPopularityEntry.get())
df['SE'] = float(EnergyEntry.get())
df['ST'] = float(TempoEntry.get())
features2 = mapper.transform(df[['Lyrics_User', 'ST', 'SE', 'AP']])
Это дает еще одну ошибку:
Исключение в обратном вызове Tkinter (последний последний вызов):
файл
"C: \ Users \ moksh \ Anaconda3 \ Lib \ сайта-пакеты \ панды \ ядро \ индексы \ base.py",
строка 3063, в get_loc
вернуть файл self._engine.get_loc (key) файл "pandas_libs \ index.pyx", строка 140, в файле pandas._libs.index.IndexEngine.get_loc
"pandas_libs \ index.pyx", строка 162, в
Файл pandas._libs.index.IndexEngine.get_loc
"pandas_libs \ hashtable_class_helper.pxi", строка 1492, в
Файл pandas._libs.hashtable.PyObjectHashTable.get_item
"pandas_libs \ hashtable_class_helper.pxi", строка 1500, в
pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 'Lyrics'
Во время обработки вышеуказанного исключения произошло другое исключение:
Traceback (последний вызов был последним): File
"C: \ Users \ moksh \ Anaconda3 \ lib \ tkinter__init __. Py", строка 1702, в
вызов
return self.func (* args) Файл "", строка 53, в прогнозе
features2 = mapper.transform (файл df [['Lyrics_User', 'ST', 'SE', 'AP']])
"C: \ Users \ moksh \ Anaconda3 \ Lib \ сайта-пакеты \ sklearn_pandas \ dataframe_mapper.py",
строка 289, в преобразовании
Xt = self._get_col_subset (X, столбцы, input_df) Файл "C: \ Users \ moksh \ Anaconda3 \ lib \ site-packages \ sklearn_pandas \ dataframe_mapper.py",
строка 182, в _get_col_subset
t = X [cols [0]] Файл "C: \ Users \ moksh \ Anaconda3 \ lib \ site-packages \ pandas \ core \ frame.py",
строка 2685, в getitem
вернуть self._getitem_column (key) файл "C: \ Users \ moksh \ Anaconda3 \ lib \ site-packages \ pandas \ core \ frame.py",
строка 2692, в _getitem_column
вернуть self._get_item_cache (ключ) Файл "C: \ Users \ moksh \ Anaconda3 \ lib \ site-packages \ pandas \ core \ generic.py",
строка 2486, в _get_item_cache
values = self._data.get (item) Файл "C: \ Users \ moksh \ Anaconda3 \ lib \ site-packages \ pandas \ core \ internals.py",
линия 4115, в get
loc = self.items.get_loc (item) Файл "C: \ Users \ moksh \ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexes \ base.py",
строка 3065, в get_loc
вернуть self._engine.get_loc (self._maybe_cast_indexer (key)) файл "pandas_libs \ index.pyx", строка 140, в
Файл pandas._libs.index.IndexEngine.get_loc
"pandas_libs \ index.pyx", строка 162, в
Файл pandas._libs.index.IndexEngine.get_loc
"pandas_libs \ hashtable_class_helper.pxi", строка 1492, в
Файл pandas._libs.hashtable.PyObjectHashTable.get_item
"pandas_libs \ hashtable_class_helper.pxi", строка 1500, в
pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 'Lyrics'