Informatika2-2014/FeladatPaciens
A MathWikiből
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()