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获取列名
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)