python机器学习相关的操作 numpy,GridSearchCV(网格搜索)等

numpy切片操作
视频讲解
numpy 简单入门
GridSearchCV的简单使用视频讲解
SVM参数优化
metrics中的precision_score,recall_score,accuracy_score

import numpy as np
# genfromtxt是一种导入数据的方式,数据加载的时候能够处理丢失数据
data = np.genfromtxt("./data/spam.data",delimiter=" ")
# numpy的切片操作!!!
# 取行
# numpy的切片操作根普x通的列表不同,例如data[0,1]取的是第0行,1列的数据
# 而data[0:2:1]表示从第0行取到第1行,间隔为1
# data[[1,3,5]] 取 1 3 5 索引行
# 取列
# data[行,列]
# data[:,1]取第一列
# data[:,[1,2,3]]取1,2,3列
x = data[:,:-1] # 取除最后一列的所有数据
y = data[:,-1] # 取最后一列数据

关于GridSearch的使用和SVM交叉验证

if __name__ == '__main__':
    test_classifiers = ['NB', 'KNN', 'LR', 'RF', 'DT', 'SVM', 'GBDT']
    # 这里测试了朴素贝叶斯,k近邻,逻辑回归,随机森林,支持向量机等五种方法
    classifiers = {'NB': naive_bayes_classifier,
                   'KNN': knn_classifier,
                   'LR': logistic_regression_classifier,
                   'RF': random_forest_classifier,
                   'SVM': svm_classifier,
                   }
    print("训练集的规模:",x_train.shape)
    print("测试集的规模",x_test.shape)
    print("*"*28+"下面开始测试"+"*"*28)
    for classifier in classifiers:
        print("*"*28+classifier+"*"*28)
        time1 = time.time()
        test_model = classifiers[classifier](x_train,y_train)
        timeAll = time.time() - time1
        print("training time: %.4fs"%(timeAll))
        # 预测的数据
        predict = test_model.predict(x_test)
        '''
        精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。
        那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)
        也就是而召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。
        那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。
        其实就是分母不同,一个分母是预测为正的样本数,另一个是原来样本中所有的正样本数。
        讲解网站:https://www.zhihu.com/question/19645541
        '''
        # 可以用metrics来对测试数据的准确度等进行判断,其中 accuracy = model.score
        precision = metrics.precision_score(y_test,predict)
        recalll = metrics.recall_score(y_test,predict)
        print("精确率为:%.2f%% 召回率为:%.2f%%"%(precision*100,recalll*100))
        accuracy = metrics.accuracy_score(y_test,predict)
        print("准确率:%.2f%%  %.2f%%"%(accuracy*100,100*test_model.score(x_test,y_test))) # accuracy就是跟正确率一样

    # 这里是对SVM的交叉验证方法进行学习测试
    from sklearn.svm import SVC
    from sklearn.model_selection import GridSearchCV
    from sklearn.preprocessing import StandardScaler

    # 创建svm模型
    model = SVC(kernel='rbf',probability=True)
    # 进行标准化处理
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    '''  !!!!注意这里是用网格搜索找出最优参数!!!!!   '''
    # 1.找出参数有可能的值,并写在param_grid字典当中
    C = []
    for i in range(-5,15+1,2):
        C.append(2**i)
    gama = []
    for i in range(-15,3+1,2):
        gama.append(2**i)
    param_grid = { 'C':C , 'gamma':gama}
    # 2.进行网格搜索,需要调用GridSearchCV
    grid_search = GridSearchCV(model,param_grid,cv=5,n_jobs=1,verbose=1) # 输出训练过程
    # 3.训练数据
    grid_search.fit(x_train, y_train)
    best_parameters = grid_search.best_params_
    # 4.可以输出最优参数下模型评分,最优模型,最优模型在第几个
    print("best_index",grid_search.best_index_)
    print("best_score",grid_search.best_score_)
    print("best_params", grid_search.best_params_)
    print("best_estimator",grid_search.best_estimator_)
    # 5.将最优参数写入模型当中
    model = SVC(kernel='rbf',probability=True,C=best_parameters['C'],gama = best_parameters['gama'])
    model.fit(x_train,y_train)
    predict = model.predict(x_test)
    # 当分类的y不止0 1的时候,也就是多任务分类。
    #可在添加 metrics.precision_score(x_test,predict,,average= 'macro')
    precision = metrics.precision_score(x_test,predict)
    recalll = metrics.recall_score(x_test,predict)
    accuracy = metrics.accuracy_score(x_test,predict)
    print("*"*28+"svm_cross_validation"+"8"*28)
    print("精确度:%.2f%%  召回率: %.2f%%"%(precision*100,recalll*100))
    print("准确度:%.2f%%"%(accuracy*100))

numpy.unique

在这里插入图片描述

pandas获取列名

获取pandas列名的几种方法

import pandas as pd

row = ["a","b","c"]
cols = ["琼楼","玉宇","飞天"]
df = pd.DataFrame(index=row,columns=cols)
print(type(df.columns.values))
print(df.columns.values)
if "琼楼" in df.columns.values:
    print("Yes")

pandas让内容全部显示

#显示所有列
pd.set_option('display.max_columns', None)

#显示所有行
pd.set_option('display.max_rows', None)

#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值