我不确定我的代码有什么问题。(线性/多项式回归)

问题描述 投票:0回答:1

我有一个数据集(csv文件),其中包含三个单独的列。第0列是信号时间,第1列是频率,第2列是强度。可以通过找到每个信号频率的方差来对数据中的大量噪声进行分类。如果它小于2332,则它是正确的频率。因此,这就是我要用来计算线性/多边形回归的数据。 ps。我必须手动计算线性:(。我嵌套的for循环决策结构当前无法正常工作。任何解决方案都将有所帮助!谢谢

data = csv.reader(file1)
sort = sorted(data, key=(operator.itemgetter(1))) #sorted by the frequencies
for row in sort:
x.append(float(row[0]))
y.append(float(row[2]))
frequencies.append(float(row[1]))

for i in range(499) : 
freq_dict.update({ frequencies[i] : [x[i], y[i]] })

for key in freq_dict.items(): 
   for row in sort : 
       if key == float(row[1]):
           a.append(float(row[1]))
           b.append(float(row[2]))
           c.append(float(row[0]))
       else :
           num = np.var(a)
           if num < 2332.0: 
               linearRegression(c, b, linear)
               print('yo')
               polyRegression(c, b, d, linear, py)
               mplot.plot(linear, py)
           else: 
               a = [] 
               b = [] 
               c = []

我需要的频率方差等于或小于2332

我需要的频率方差等于或小于2332

我使用了499的范围,因为那是我的数据集的长度。另外,如果频率不正确,我尝试清除列表(a,b,c)。

python dictionary linear-regression
1个回答
0
投票

我看到了几个问题。我不确定为什么要对数据进行排序,如果大家都知道要查找的确切值。我不确定为什么还要将数据拆分为单独的变量。双重“ for”循环意味着您要对freq_dict中的每个键重复“ sort”中的所有内容。不知道这是否是您打算多次重复所有这些值。另外,freq_dict.items()生成元组(键,值对),因此您的“键”是元组,因此“键”将永远不等于浮点数。无论如何,这是尝试重新编写一些代码。

import csv, numpy
import matplotlib.pyplot as plt
from scipy import stats

data   = csv.reader(file1)                    #Read file. 
f_data = filter(lambda (x,f,y):f<2332.0,data) #Filter data to condition. 
x,_,y  = list(zip(*f_data))                   #Split data down column. 

#Standard linear stats function. 
slope,intercept,r_value,p_value,std_err = stats.linregress(x,y)

#Plot the data and the fit line. 
plt.scatter(x,y)
plt.plot(x,numpy.array(x)*slope+intercept)
plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.