我正在尝试实现以下预期输出部分中的说明。文本文件每行包含 5 个浮点数,最后一个没有用,因为它只是对前面的数字表示它是真钞还是假钞票进行分类(0 是假的,1 是真的)。我想创建一个循环,它可以取每行的第一个数字(有 600 多行)并找到平均值,与每行的第二个数字、第三个和第四个数字相同。输出应该是一个列表,显示每个平均值 [avg1 avg2 avg3 avg4]。下面的代码可以成功执行此操作,但一次只能执行一个。例如。在这行 sum += float(line.split()[0]) 中,将 0 更改为 1 将给出每行中第二个数字的平均值,依此类推。我如何创建一个有效的循环来一次给我所有的平均值?
我已经尝试复制循环并为每个数字“列”粘贴 4 次,但它效率低下且不起作用。
import web_scraper
import urllib.request
import math
def data_text_files():
page = 'http://archive.ics.uci.edu/ml/machine-learning-
databases/00267/data_banknote_authentication.txt'
stream = urllib.request.urlopen(page)
samples = web_scraper.get_all_data(stream, ',')
training = open("training2.txt", "w")
testing = open ("testing2.txt", "w")
for i in range(len(samples)):
if i % 2 == 0:
#write data to training file
count = 1
for bill in samples[i]:
bill_str = str(bill)
if(count == 5):
training.write(bill_str + "\n")
count = 1
else:
training.write(bill_str + " ")
count += 1
else:
#write data to testing file
count = 1
for bill in samples[i]:
bill_str = str(bill)
if(count == 5):
testing.write(bill_str + "\n")
count = 1
else:
testing.write(bill_str + " ")
count += 1
data_text_files()
with open('training2.txt') as fh:
sum = 0 # initialize here, outside the loop
count = 0 # and a line counter
for line in fh:
count += 1 # increment the counter
sum += float(line.split()[0]) # add here, not in a nested loop
每个数据样本有4个属性(不包括最后一个表示样本分类的属性)。所以,数据看起来像这样:
[ [2, 4, 6, 8, 0],
[4, 6, 8, 10, 0],
[1, 3, 5, 7, 1]
[3, 5, 7, 9, 1]]
要构建分类器,您将使用“training.txt”中的数据:
计算具有相同分类(0 或 1)的所有样本的每个属性的平均值。对于上面显示的数据,伪造样本 (0) 中每个属性的平均值为 [3, 5, 7, 9],而真实样本 (1) 的平均值为 [2, 4, 6, 8]。通过将伪造品的平均值和真实样品的平均值相加,找出两组平均值之间的中点,然后将结果除以二。这将为每个属性完成。因此,对于显示的数据,中点将是 [2.5, 4.5, 6.5, 8.5 ]。中点是我们将用作分类器的东西。
桃花长相依
相关分类