文章目录
Scikit-learn机器学习库包含的机器学习方法
官网直达scikit-learn: machine learning in Python — scikit-learn 0.21.3 documentation
https://scikit-learn.org/stable/
本例中用到的方法有:
classifiers = {
'NB':naive_bayes_classifier,
'KNN':knn_classifier,
'LR':logistic_regression_classifier,
'RF':random_forest_classifier,
'DT':decision_tree_classifier,
'SVM':svm_classifier,
'SVMCV':svm_cross_validation,
'GBDT':gradient_boosting_classifier
}
1 加载训练集和测试集数据
核心代码注解
# 使用gizp打开文件,read bytes字节方式读取
f = gzip.open(data_file,"rb")
# 使用pickle方法从序列化的数据中按照字节方式加载到内存
train, val, test = pickcle.load(f, encoding = 'bytes')
# 获取训练数据集的样本数和特征维度
num_train, num_feat = train_x.shape
# 对训练集的标记进行去重处理,判断输出空间的维度,如果是2,就说明是一个二分类问题
is_binary_class = (len(np.unique(train_y)) == 2)
Python数据存储:pickle模块的使用讲解 - 风-fmgao - 博客园
https://www.cnblogs.com/fmgao-technology/p/9078918.html
完整代码如下
# python中对数据进行序列化,并保存到对象中的操作模块
import pickle
# 原本是linux中的解压缩命令
import gzip
# 开始读取数据
print('reading training and testing data...')
# 使用gzip里的方法打开数据文件
f = gzip.open(data_file, "rb")
# 编码方式用bytes字节而不是ascll字符,也不是utf-8,这里自动就加载了训练集和测试集
train, val, test = pickle.load(f,encoding='bytes')
f.close()
# 第一列是特征
train_x = train[0]
# 第二列是标记
train_y = train[1]
test_x = test[0]
test_y = test[1]
# 获取大小,结果是(50000, 784),即50000行,784列,784表示特征的维度
num_train, num_feat = train_x.shape
# 大小是(10000, 784)
num_test, num_feat = test_x.shape
# np.unique(train_y)表示测试数据集去重之后的结果,测试数据集包含0~9的数据
# 如果这个长度是2,说明数字只有两类,变成二分类问题
is_binary_class = (len(np.unique(train_y)) == 2)
print('******************** Data Info *********************')
print('#training data: %d, #testing_data: %d, dimension: %d' % (num_train, num_test, num_feat))
输出结果:
reading training and testing data...
******************** Data Info *********************
#training data: 50000, #testing_data: 10000, dimension: 784
2 模型训练,预测和性能测试报告
关键代码分析
# 统计花费的时间
time_cost = time.time() - start_time
# 选择模型
model = MultinomialNB(alpha=0.01)
# 模型训练(在训练集上)
model.fit(train_x, train_y)
# 模型预测(在测试集上)
predict = model.predict(