python单分类预测模版,输出支持度,多种分类器,str的csv转float

预测结果为1到11中的1个

首先加载数据,训练数据,训练标签,预测数据,预测标签:

if __name__=="__main__":  

    importTrainContentdata()
    importTestContentdata()
    importTrainlabeldata()
    importTestlabeldata()
traindata = []
testdata = []
trainlabel = []
testlabel = []

def importTrainContentdata():
    file = ‘F:/goverment/myfinalcode/train_big.csv‘
    fo=open(file)
    ls=[]
    for line in fo:
        line=line.replace("\t",",")
        line=line.replace("\n",",")
        line=line.replace("\"",",")
        ls.append(line.split(","))
    for i in ls:
        li=[]
        for j in i:
            if j == ‘‘:
                continue
            li.append(float(j))
        traindata.append(li)

def importTestContentdata():
    file = ‘F:/goverment/myfinalcode/test_big.csv‘
    fo=open(file)
    ls=[]
    for line in fo:
        line=line.replace("\t",",")
        line=line.replace("\n",",")
        line=line.replace("\"",",")
        ls.append(line.split(","))
    for i in ls:
        li=[]
        for j in i:
            if j == ‘‘:
                continue
            li.append(float(j))
        testdata.append(li)   

#导入类别的训练和测试数据
def importTrainlabeldata():
    file = ‘F:/goverment/myfinalcode/train_big_label.xls‘
    wb = xlrd.open_workbook(file)
    ws = wb.sheet_by_name("Sheet1")
    for r in range(ws.nrows):
        col = []
        for c in range(1):
            col.append(ws.cell(r, c).value)
        trainlabel.append(col)

def importTestlabeldata():
    file = ‘F:/goverment/myfinalcode/test_big_label.xls‘
    wb = xlrd.open_workbook(file)
    ws = wb.sheet_by_name("Sheet1")
    for r in range(ws.nrows):
        col = []
        for c in range(1):
            col.append(ws.cell(r, c).value)
        testlabel.append(col)

其中训练数据,预测数据是csv文件格式,而且是str,要转为float并一排排放入lis,然后将所有lis放入traindata或testdata中,但csv中是以","隔开的,所以要将"\t"等都转为",",需要利用

ls.append(line.split(","))放入ls中,但仍然是str型的,我又另外转化成了float,后来发现不转化也是可以的,可能它后来会在即转化吧。

之后运用多种分类器,调参数参考http://scikit-learn.org/stable/supervised_learning.html#supervised-learning 然后选出尽量好的分类器,提高准确率
 ‘‘‘
    #19%
    from sklearn import neighbors
    knn=neighbors.KNeighborsClassifier(n_neighbors=75, leaf_size=51, weights=‘distance‘,p=2)
    knn.fit(traindata, trainlabel)
    predict=knn.predict(testdata)
    ‘‘‘

    ‘‘‘
    #这个不行
    from sklearn.neural_network import MLPClassifier
    import numpy as np
    traindata = np.array(traindata)#TypeError: cannot perform reduce with flexible type
    traindata = traindata.astype(float)

    trainlabel = np.array(trainlabel)
    trainlabel = trainlabel.astype(float)

    testdata=np.array(testdata)
    testdata = testdata.astype(float)
    model=MLPClassifier(activation=‘relu‘, alpha=1e-05, batch_size=‘auto‘,
       beta_1=0.9, beta_2=0.999, early_stopping=False,
       epsilon=1e-08, hidden_layer_sizes=(5, 2), learning_rate=‘constant‘,
       learning_rate_init=0.001, max_iter=200, momentum=0.9,
       nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
       solver=‘lbfgs‘, tol=0.0001, validation_fraction=0.1, verbose=False,
       warm_start=False)
    model.fit(traindata, trainlabel)
    predict = model.predict(testdata)
    ‘‘‘

    ‘‘‘
    #19%
    from sklearn.tree import DecisionTreeClassifier
    model=DecisionTreeClassifier(class_weight=‘balanced‘,max_features=68,splitter=‘best‘,random_state=5)
    model.fit(traindata, trainlabel)
    predict = model.predict(testdata)

    这个不行
    from sklearn.naive_bayes import MultinomialNB
    clf = MultinomialNB(alpha=0.052).fit(traindata, trainlabel)
    #clf.fit(traindata, trainlabel)
    predict=clf.predict(testdata)
    ‘‘‘

    ‘‘‘17%
    from sklearn.svm import SVC
    clf = SVC(C=150,kernel=‘rbf‘, degree=51, gamma=‘auto‘,coef0=0.0,shrinking=False,probability=False,tol=0.001,cache_size=300, class_weight=None,verbose=False,max_iter=-1,decision_function_shape=None,random_state=None)
    clf.fit(traindata, trainlabel)
    predict=clf.predict(testdata)
    ‘‘‘

    ‘‘‘0.5%
    from sklearn.naive_bayes import GaussianNB
    import numpy as np
    gnb = GaussianNB()
    traindata = np.array(traindata)#TypeError: cannot perform reduce with flexible type
    traindata = traindata.astype(float)
    trainlabel = np.array(trainlabel)
    trainlabel = trainlabel.astype(float)
    testdata=np.array(testdata)
    testdata = testdata.astype(float)
    predict = gnb.fit(traindata, trainlabel).predict(testdata)
    ‘‘‘

    ‘‘‘16%
    from sklearn.naive_bayes import BernoulliNB
    import numpy as np
    gnb = BernoulliNB()
    traindata = np.array(traindata)#TypeError: cannot perform reduce with flexible type
    traindata = traindata.astype(float)

    trainlabel = np.array(trainlabel)
    trainlabel = trainlabel.astype(float)

    testdata=np.array(testdata)
    testdata = testdata.astype(float)
    predict = gnb.fit(traindata, trainlabel).predict(testdata)
    ‘‘‘

    from sklearn.ensemble import RandomForestClassifier
    forest = RandomForestClassifier(n_estimators=500,random_state=5, warm_start=False, min_impurity_decrease=0.0,min_samples_split=15)  # 生成随机森林多分类器

    predict = forest.fit(traindata, trainlabel).predict(testdata)

输出准确率,我还把预测结果输出到txt中,方便分析。

s=len(predict)

    f=open(‘F:/goverment/myfinalcode/predict.txt‘, ‘w‘)
    for i in range(s):
       f.write(str(predict[i]))
       f.write(‘\n‘)
    f.write("写好了")
    f.close()

    k=0
    print(s)

    for i in range(s):
        if testlabel[i] == predict[i]:
            k=k+1
    print("精度为:",k*1.0/s)
接下来是输出所有标签的支持度
    print(‘我要开始输出支持度啦‘)
    attribute_proba=forest.predict_proba(testdata)
    #print(forest.predict_proba(testdata))#输出各个标签的概率
    print(type(attribute_proba))

    import xlwt
    myexcel = xlwt.Workbook()
    sheet = myexcel.add_sheet(‘sheet‘)
    si=-1
    sj=-1
    for i in attribute_proba:
        si=si+1
        for j in i:
            sj=sj+1
            sheet.write(si,sj,str(j))
        sj=-1
    myexcel.save("attribute_proba_small.xls") 

运行结果如下:

但是这样还不够,我还要输出前3个的预测结果的编号和支持度。我开了个类attri,key用来放编号,weight则放支持度。之后对每一条记录的所有的预测概率(支持度)遍历3次。每次找出概率最大的一个,挑出后把编号和概率存好,并把这个值变为0,再寻找挑出最大的一个,循环3次。存好后输出到excel
    ‘‘‘接下来输出每组概率最大的四个的编号‘‘‘
    class attri:
        def __init__(self):
            self.key=0
            self.weight=0.0
    label=[]
    for i in attribute_proba:
        lis=[]
        k=0
        while k<3:
            k=k+1
            p=1
            mm=0
            sj=-1
            for j in i:
                sj=sj+1
                if j>mm:
                    mm=j
                    p=sj
            i[p]=0#难道是从1开始?我一开始写了i【p-1】但debug时发现不对
            a=attri()
            a.key=p
            a.weight=mm
            lis.append(a)
        label.append(lis)
    print(‘挑几个输出‘)
    import xlwt
    myexcel = xlwt.Workbook()
    sheet = myexcel.add_sheet(‘sheet‘)
    si=-2
    sj=-1
    for i in label:
        si=si+2
        for j in i:
            sj=sj+1
            sheet.write(si,sj,str(j.key))
            sheet.write(si+1,sj,str(j.weight))
        sj=-1
    myexcel.save("proba_big.xls")

运行结果如下:

自学得真辛苦啊,这些都是我的学习成果,准确还是可以在提高的,对你有帮助的话,点个赞吧,嘿嘿。

原文地址:https://www.cnblogs.com/caiyishuai/p/9395039.html

时间: 2024-11-29 06:14:37

python单分类预测模版,输出支持度,多种分类器,str的csv转float的相关文章

机器学习之路: python 决策树分类 预测泰坦尼克号乘客是否幸存

使用python3 学习了决策树分类器的api 涉及到 特征的提取,数据类型保留,分类类型抽取出来新的类型 需要网上下载数据集,我把他们下载到了本地, 可以到我的git下载代码和数据集: https://github.com/linyi0604/MachineLearning 1 import pandas as pd 2 from sklearn.cross_validation import train_test_split 3 from sklearn.feature_extraction

数据挖掘 ---支持度和置信度的用法

如果客户买了 xx 物品,那么他可能买YY物品 规则常用的方法,支持度和置信度 支持度是指规则的应验次数 置信度就是应验次数所占的比例 直接上代码 # 面包,牛奶,奶酪,苹果,香蕉 from collections import OrderedDict import numpy as np from pyexcel_xls import get_data from pyexcel_xls import save_data xls_data = get_data(r"777.xls")

数据回归分类预测的基本算法及python实现

数据回归分类预测的基本算法及python实现 关于数据的回归和分类以及分析预测.讨论分析几种比较基础的算法,也可以算作是比较简单的机器学习算法. 一.        KNN算法 邻近算法,可以用来做回归分析也可以用来做分类分析.主要思想是采取K个最为邻近的自变量来求取其应变量的平均值,从而做一个回归或者是分类.一般来说,K取值越大,output的var会更小,但bias相应会变大.反之,则可能会造成过拟合.因此,合理的选取K的值是KNN算法当中一个很重要的步骤. Advantages First

【机器学习详解】SVM解二分类,多分类,及后验概率输出

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51073885 CSDN?勿在浮沙筑高台 支持向量机(Support Vector Machine)曾经在分类.回归问题中非常流行.支持向量机也称为最大间隔分类器,通过分离超平面把原始样本集划分成两部分. 首先考虑最简单的情况:线性可分支持向量机,即存在一个超平面可以把训练样本分开. 1.线性可分支持向量机 1.考虑一个线性二分类的问题:如下左图,在二维平面上有二种样本点x,目

13、Selenium+python+API分类总结

Selenium+python+API分类总结 http://selenium-python.readthedocs.org/index.html 分类 方法 方法描述 客户端操作 __init__(self, host, port, browserStartCommand, browserURL) 构造函数.host:selenium server的ip:port:elenium server的port,默认为4444:browserStartCommand:浏览器类型,iexplore,fi

【机器学习具体解释】SVM解二分类,多分类,及后验概率输出

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51073885 CSDN?勿在浮沙筑高台 支持向量机(Support Vector Machine)以前在分类.回归问题中非常流行.支持向量机也称为最大间隔分类器,通过分离超平面把原始样本集划分成两部分. 首先考虑最简单的情况:线性可分支持向量机.即存在一个超平面能够把训练样本分开. 1.线性可分支持向量机 1.考虑一个线性二分类的问题:例如以下左图,在二维平面上有两种样本点x

多标签分类及多输出分类

1.多标签分类 有些情况,会想让你的分类器给一个样例输出多个类别.比如思考一个人脸识别器,并识别出这个是谁.这就需要对于同一张图片,首先识别出有几个人,并给识别出的人贴上标签.这就是多个二值标签的分类系统被叫做多标签分类系统. 现在,我们打算使用MNIST数据做一个是否为大数字(大于6).是否为奇数的多标签分类. from sklearn.neighbors import KNeighborsClassifier knn_clf = KNeighborsClassifier() y_train_

python 单下划线/双下划线使用总结(转载)

python 单下划线/双下划线使用总结 时间:2013-10-08 10:56来源:www.chengxuyuans.com Python 用下划线作为变量前缀和后缀指定特殊变量/方法. 主要存在四种情形1.    1. object # public    2. __object__ # special, python system use, user should not define like it    3. __object # private (name mangling duri

读论文《BP改进算法在哮喘症状-证型分类预测中的应用》

总结: 一.研究内容 本文研究了CAL-BP(基于隐层的竞争学习与学习率的自适应的改进BP算法)在症状证型分类预测中的应用. 二.算法思想 1.隐层计算完各节点的误差后,对有最大误差的节点的权值进行正常修正,  而对其它单元的权值都向相反方向修正,用 δ表示隐层节点的权值修正量, 则修正量的调整公式具体为 2.每次算法迭代完以后,计算误差函数的值并与前一次的值进行比较,如果误差函数的值增大,     则代表过调了学习率,应在下一次迭代时以一定比率下调学习率 ],若误差函数的i+1值减小,