Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建正确的S形曲线?_Python_Logistic Regression_Sigmoid - Fatal编程技术网

Python 如何创建正确的S形曲线?

Python 如何创建正确的S形曲线?,python,logistic-regression,sigmoid,Python,Logistic Regression,Sigmoid,我试图使用逻辑回归方法,根据歌曲的持续时间和耐用性,对Spotify 2010-2019年间热门歌曲的受欢迎程度进行分析,这些歌曲的数据是从.csv文件中收集的。基本上,因为每首歌曲的流行度值都是数字,所以我将它们转换成二进制数字“0”到“1”。如果热门歌曲的流行度值小于70,我会将其当前值替换为0,如果其值大于70,则反之亦然 当前的S形曲线现在是“对数”,因此它显示的是一条直线。然而,在这段代码的上下文中,我仍然不知道如何添加一条合适的S形曲线,而不仅仅是直线。为了在同一个图形中同时显示实心

我试图使用逻辑回归方法,根据歌曲的持续时间和耐用性,对Spotify 2010-2019年间热门歌曲的受欢迎程度进行分析,这些歌曲的数据是从.csv文件中收集的。基本上,因为每首歌曲的流行度值都是数字,所以我将它们转换成二进制数字“0”到“1”。如果热门歌曲的流行度值小于70,我会将其当前值替换为0,如果其值大于70,则反之亦然

当前的S形曲线现在是“对数”,因此它显示的是一条直线。然而,在这段代码的上下文中,我仍然不知道如何添加一条合适的S形曲线,而不仅仅是直线。为了在同一个图形中同时显示实心的S形曲线和曲线的对数,是否需要向代码中添加任何内容?如果有人能帮我完成最后一步,我将不胜感激

 %matplotlib inline
 import numpy as np
 import matplotlib.pyplot as plt 
 import pandas as pd

 df = pd.read_csv('top10s [SubtitleTools.com] (2).csv')

 BPM = df.bpm
 BPM = np.array(BPM)
 Energy = df.nrgy
 Energy = np.array(Energy)
 Dance = df.dnce
 Dance = np.array(Dance)
 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
 Speech = np.array(Speech)

 df.loc[df['popu'] <= 70, 'popu'] = 0

 df.loc[df['popu'] > 70, 'popu'] = 1

 def Logistic_Regression(X, y, iterations, alpha):
   ones = np.ones((X.shape[0], ))
   X = np.vstack((ones, X))
   X = X.T
   b = np.zeros(X.shape[1])

   for i in range(iterations):
     z = np.dot(X, b)
     p_hat = sigmoid(z)
     gradient = np.dot(X.T, (y - p_hat))/y.size
     b = b + alpha * gradient
     if (i % 1000 == 0):
       print('LL, i ', log_likelihood(X, y, b), i)
   return b

 def sigmoid(z):
   return 1 / (1 + np.exp(-z))

 def log_likelihood(X, y, b):
   z = np.dot(X, b)
   LL = np.sum(y*z - np.log(1 + np.exp(z)))
   return LL

 def LR1():
   Dur = df.dur
   Dur = np.array(Dur)
   Pop = df.popu

   Pop = [int(i) for i in Pop]; Pop = np.array(Pop)


   plt.figure(figsize=(10,8))
   colormap = np.array(['r', 'b'])
   plt.scatter(Dur, Pop, c = colormap[Pop], alpha = .4)
   b = Logistic_Regression(Dur, Pop, iterations = 8000, alpha = 0.00005)
   print('Done')

   p_hat = sigmoid(np.dot(Dur, b[1]) + b[0])
   idxDur = np.argsort(Dur)
   plt.plot(Dur[idxDur], p_hat[idxDur])
   plt.show()

 LR1()
%matplotlib内联
将numpy作为np导入
将matplotlib.pyplot作为plt导入
作为pd进口熊猫
df=pd.read_csv('top10s[SubtitleTools.com](2.csv'))
BPM=df.BPM
BPM=np.array(BPM)
能量=df.nrgy
能量=np.阵列(能量)
舞蹈
舞蹈=np.数组(舞蹈)
dB=df.dB
dB=np.数组(dB)
Live=df.Live
Live=np.数组(Live)
价=df.val
价=np.数组(价)
Acous=df.Acous
Acous=np.数组(Acous)
语音=df.spch
语音=np.数组(语音)
df.loc[df['popu']70,'popu']=1
def Logistic_回归(X,y,迭代次数,alpha):
1=np.1((X.shape[0],))
X=np.vstack((一个,X))
X=X.T
b=np.零(X.形[1])
对于范围内的i(迭代):
z=np.点(X,b)
p_hat=乙状结肠(z)
梯度=np.点(X.T,(y-p_hat))/y.大小
b=b+alpha*梯度
如果(i%1000==0):
打印('LL,i',log_可能性(X,y,b),i)
返回b
def乙状结肠(z):
返回1/(1+np.exp(-z))
def log_可能性(X,y,b):
z=np.点(X,b)
LL=np.sum(y*z-np.log(1+np.exp(z)))
返回LL
def LR1():
Dur=df.Dur
Dur=np.数组(Dur)
Pop=df.popu
Pop=[int(i)表示Pop中的i];Pop=np.数组(Pop)
plt.图(figsize=(10,8))
colormap=np.array(['r','b'])
plt.散射(Dur,Pop,c=colormap[Pop],alpha=0.4)
b=逻辑回归(Dur,Pop,迭代次数=8000,α=0.00005)
打印(‘完成’)
p_hat=sigmoid(np.dot(Dur,b[1])+b[0])
idxDur=np.argsort(Dur)
plt.plot(Dur[idxDur],p_hat[idxDur])
plt.show()
LR1()
我的数据集:

我想要的是:


乍一看,逻辑回归初始化似乎非常错误

我想你用[X,1]填充X,然后尝试学习W=[Weight,bias],这应该是[1,0]开始


注意1是向量[1,1,1…],长度=特征向量长度。

乍一看,逻辑回归初始化似乎非常错误

我想你用[X,1]填充X,然后尝试学习W=[Weight,bias],这应该是[1,0]开始


请注意,1是向量[1,1,1…],长度=特征向量长度。

尝试以下方法:

x_range=np.linspace(Dur.min(),Dur.max(),100)

p_hat=sigmoid(np.dot(x_范围,b[1]),b[0])

plt.绘图(x_范围,p_帽)


plt.show()

x_range=np.linspace(Dur.min(),Dur.max(),100)

p_hat=sigmoid(np.dot(x_范围,b[1]),b[0])

plt.绘图(x_范围,p_帽)

plt.show()