В настоящее время я работаю над этим набором данных, который относится к лучшим песням хитов на Spotify с 2010 по 2019 год, и я использую Logisti c Регрессия для работы над отношениями между речевостью песен (зависимой) и длительность и валентность соответственно (независимо). У меня возникают проблемы с попыткой преобразовать числовые значения речевости песен в двоичные значения для классификации, так как я использую регрессию logisti c. Кроме того, я не знаю, как разделить диаграммы рассеяния с границей решения. Буду очень признателен, если кто-нибудь сможет мне помочь с этим.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LogisticRegression
df = pd.read_csv('top10s [SubtitleTools.com] (2).csv')
def LogReg0732():
Dur = df.dur
Dur = np.array(Dur)
Dance = df.dnce
BPM = df.bpm
BPM = np.array(BPM)
Energy = df.nrgy
Energy = np.array(Energy)
dB = df.dB
dB = np.array(dB)
Live = df.live
Live = np.array(Live)
Valence = df.val
Valence = np.array(Valence)
Acous = df.acous
Acous = np.array(Acous)
Speech = df.spch
Dance = np.array(Dance)
Pop = df.popu
Pop = np.array(Pop)
Speech = (Speech < 8).astype(int)
Speech = np.array(Speech)
X = Dur
X = np.stack((X, Valence))
y = Speech
clf = LogisticRegression().fit(X.T, y)
print("Coef ", clf.intercept_, clf.coef_)
xx, yy = np.mgrid[np.min(Dur):np.max(Dur), np.min(Valence):np.max(Valence)]
gridxy = np.c_[xx.ravel(), yy.ravel()]
probs = clf.predict_proba(gridxy)[:,1].reshape(xx.shape)
f, ax = plt.subplots(figsize=(10,8))
contour = ax.contourf(xx, yy, probs, 25, cmap="BrBG", vmin=0, vmax=1)
ax_c = f.colorbar(contour)
ax_c.set_ticks([0, 1/4, 1/2, 3/4, 1])
idx = np.where(y==1); idx = np.reshape(idx,np.shape(idx)[1])
y1 = X[:,idx]
idx = np.where(y==0); idx = np.reshape(idx,np.shape(idx)[1])
y0 = X[:,idx]
ax.scatter(y1[0,:], y1[1,:], c='green')
ax.scatter(y0[0,:], y0[1,:], c='blue')
plt.xlabel('Duration')
plt.ylabel('Valence')
plt.savefig('LR1.svg')
plt.show()
LogReg0732()
Мой текущий график
Тип графика, которого я хочу достичь
Мой набор данных