首页 > 代码库 > 数据挖掘--Python入门经典学习1--乳腺癌分类问题

数据挖掘--Python入门经典学习1--乳腺癌分类问题

基于肿瘤特征判定是恶性肿瘤还是良性肿瘤,通过研究699个患者的肿瘤属性,找到肿瘤预测模式,根据肿瘤属性来判定肿瘤性质,对没有见过见过面的患者,根据属性来判定是否为恶性肿瘤。

用到的数据:链接:http://pan.baidu.com/s/1c26Dbjy 密码:gllb

 

[html] view plain copy
 
  1. ###########################################  
  2. #        分类器:肿瘤良性还是恶性  
  3. ###########################################  
  4.   
  5.   
  6.   
  7. ###########################################  
  8. #      读入数据集,并得到元祖列表  
  9. ###########################################  
  10. def ReadSet(FileName):  
  11.     TrainSet = []  
  12.     TrainFile = open(FileName)  
  13.     for line in TrainFile:  
  14.         line = line.strip()             #去掉‘\n‘  
  15.         if ‘?‘ in line:                 #注意:引号中间不要有空格,去掉含有问号的坏数据  
  16.             continue  
  17.         id,a1,a2,a3,a4,a5,a6,a7,a8,a9,diag = line.split(‘,‘)#以逗号分开  
  18.         if diag == ‘4‘:  
  19.             diagMorB = ‘m‘  
  20.         else:  
  21.             diagMorB = ‘b‘  
  22.         PatientTuple = (id,diagMorB,int(a1),int(a2),int(a3),int(a4),int(a5),\  
  23.                         int(a6),int(a7),int(a8),int(a9))  
  24.         TrainSet.append(PatientTuple)  
  25.     return TrainSet  
  26. ###########################################  
  27. #           训练分类器  
  28. ###########################################  
  29. def sumLists(list1,list2):  
  30.     listofsums =[0.0] * 9  
  31.     for index in range(9):  
  32.         listofsums[index] = list1[index] + list2[index]  
  33.     return listofsums  
  34.   
  35. def makeAverages(listofsums,total):  
  36.     averageList =[0.0] * 9  
  37.     for index in range(9):  
  38.         averageList[index] = listofsums[index]  / float(total)  
  39.     return averageList  
  40.   
  41. def Classifier(TrainSet):  
  42.     benignSums = [0] * 9  
  43.     benignCount = 0  
  44.     malignantSums = [0] * 9  
  45.     malignantCount = 0  
  46.   
  47.     for patientTup in TrainSet:  
  48.         if patientTup[1] == ‘b‘:  
  49.             benignSums = sumLists(benignSums,patientTup[2:])  
  50.             benignCount += 1  
  51.         else:  
  52.             malignantSums = sumLists(malignantSums,patientTup[2:])  
  53.             malignantCount += 1  
  54.   
  55.     benignAvgs = makeAverages(benignSums,benignCount)  
  56.     malignantAvgs = makeAverages(malignantSums,malignantCount)  
  57.   
  58.     classifier = makeAverages(sumLists(benignAvgs,malignantAvgs),2)  
  59.     return classifier  
  60. ###########################################  
  61. #           测试分类器  
  62. ###########################################  
  63. def Test(TestSet,classifier):  
  64.     results = []  
  65.     for patient in TestSet:  
  66.         benignCount = 0  
  67.         malignantCount = 0  
  68.         for index in range(9):  
  69.             if patient[index + 2] > classifier[index]:#注意索引值加2才是属性值  
  70.                malignantCount += 1  
  71.             else:  
  72.                benignCount += 1  
  73.         resultTuple = (patient[0],benignCount,malignantCount,patient[1])  
  74.         results.append(resultTuple)  
  75.     return results  
  76. ###########################################  
  77. #           格式化输出测试结果  
  78. ###########################################  
  79. def ShowResult(Result):  
  80.     totalCount = 0  
  81.     wrongcount = 0  
  82.   
  83.     for r in Result:  
  84.         totalCount += 1  
  85.         if r[1] > r[2]:  
  86.             if r[3] == ‘m‘:  
  87.                 wrongcount += 1  
  88.         elif r[3] == ‘b‘:  
  89.             wrongcount += 1  
  90.     print("%d patients,there were %d wrong" %(totalCount,wrongcount))  
  91. ###########################################  
  92. #           主函数  
  93. ###########################################    
  94. def main():  
  95.   
  96.     print("Reading in train data ...")  
  97.     TrainFileName = "C:\\Python36\\code\\RuXian\\fullTrainData.txt"  
  98.     TrainSet = ReadSet(TrainFileName)  
  99.     #print(TrainSet)  
  100.     print("Read TrainSet Done!")  
  101.   
  102.     print("Begin Training...")  
  103.     classifier = Classifier(TrainSet)  
  104.     print("Train Classifier Done!")  
  105.   
  106.     print("Reading in test data ...")  
  107.     TestFileName = "C:\\Python36\\code\\RuXian\\fullTestData.txt"  
  108.     TestSet = ReadSet(TestFileName)  
  109.     print("Read TestSet Done!")  
  110.   
  111.     print("Begin Testing...")  
  112.     Result = Test(TestSet,classifier)  
  113.     #print(Result)  
  114.     print("Test  Done!")  
  115.   
  116.     ShowResult(Result)  
  117.     print ("program finished.\n")  

参考:《Pthon入门经典学习书》

数据挖掘--Python入门经典学习1--乳腺癌分类问题