Informatika2-2014/FeladatPaciens

A MathWikiből
A lap korábbi változatát látod, amilyen Rpalovics (vitalap | szerkesztései) 2014. április 4., 09:32-kor történt szerkesztése után volt.
(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

CancerTesting

  • A feladat, hogy páciensek adatai alapján egy egyszerű jóslatot adjunk arról, hogy az illető beteg-e, vagy nem.
  • Minden betegnek van sok különböző attribútuma.
  • Ezeket egy sokoszlopos file-ban tároljuk.
  • Egy pácienst akkor nyilvánítunk betegnek, ha minimum 5 attribútumának értéke az adott atrribútum átlaga feletti.
  • A file-okban 1 + 10 + 1 oszlop szerepel.
  • Az első oszlop a beteg ID-ja, a következő 10 a különböző attribútumokat jelöli, az utolsó pedig az "igazság", 1/0 érték arról, hogy a páciens valóban beteg-e.
  • Számoljuk ki a "cancerTrainData.txt" adatai alapján az egyes attribútumok átlagait.
  • Ezek után jósoljuk meg, hogy a "cancerTestData.txt"-ben rögzített páciensek betegek-e!
  • Vessük össze predikciónkat a valósággal (órán részletesen).
  • File-ok:
  • cancerTrainData
  • cancerTestData
import sys
import math
 
def reader(fileName):
	dataSet = []
	f = open(fileName,'r')
	for line in f:
		line = line.rstrip("\n")
		L = line.split(" ")
		data = []
		for l in L:
			data.append(float(l))
		dataSet.append(data)
	return dataSet
 
def learn(trainingData):
	averages = []
	for i in range(0,10):
		averages.append(0)
	for user in trainingData:
		for i in range(0,10):
			averages[i]+=user[i+1]
	for i in range(10):
		averages[i] = averages[i] / float(len(trainingData))
	return averages     
 
def predict(averages,testingData):
	predictions = []
	for test in testingData:
		aboveAverage = 0
		for i in range(0,10):
			if(test[i+1]>averages[i]):
				aboveAverage+=1
		id = test[0]
		truth = int(test[-1])
		if aboveAverage > len(averages)*0.5:
			predictions.append([id,truth,1])
		else:
			predictions.append([id,truth,0])
	return predictions
 
def accuracy(predictions):
	acc = 0
	for prediction in predictions:
		if prediction[1] == prediction[2]:
			acc += 1
	return acc/float(len(predictions))
 
def learnAndPredict():
	trainingData = reader(sys.argv[1])
	testingData = reader(sys.argv[2])
	averages = learn(trainingData)
	predictions = predict(averages,testingData)
	print "Accuracy: ", accuracy(predictions)
 
learnAndPredict()
Személyes eszközök