题目
本次实验为分类任务,实验数据在附件中,共有2个文件,data_train.txt、data_test.txt,分别用于训练和测试,在训练文件中数据有55列,前54列是样本的特征(输入数据),最后一列是样本的类别(label),类别共有7种,对应为1~7。测试数据中没有类别(label),需要根据模型预测相应的类别(label),这些预测结果需要上传,并根据预测结果给出相应的分数。
作业要求:
- 使用三种模型进行预测。
- 提交预测结果,每个模型一个文件,命名为model_1.txt、model_2.txt、model_3.txt,文件中每行一个数字(1~7)表示预测结果,行数与data_test.txt的行数相同。
- 撰写实验报告,包含模型介绍,数据处理,结果展示与分析。
- 提交预测结果、实验报告、代码。
数据源:下载地址
共用代码
共用代码读取文件抽取出来,实际使用时需要将这段代码插入各模型中
# fileName: 文件名字
# isTest: =True为测试数据 label直接设0
def readDataSet(fileName, isTest):
fr = open(fileName,encoding='utf-8')
lines = fr.readlines()
numLabels = len(lines)
labels = np.zeros(numLabels)
dateSet = np.zeros([numLabels,54],int)
# 逐行读取数据到dataSet,labels
# 总共55列,前54列是样本特征,最后一列是样本类别(label)
for i in range(numLabels):
line = lines[i]
label = 0
if isTest:
label = 0
else:
label = line.split(' ')[54]
labels[i] = label
dates = np.zeros(54)
for j in range(53):
dates[j] = line.split(' ')[j]
dateSet[i] = dates
fr.close()
return dateSet,labels
使用MLPClassifier
的实现代码
import numpy as np
from sklearn.neural_network import MLPClassifier
# 在此插入公用代码
# read dataSet
train_dataSet,train_labels = readDataSet('data_train.txt', False)
clf = MLPClassifier(hidden_layer_sizes=(100,),
activation='logistic', solver='adam',
learning_rate_init = 0.0001, max_iter=2000)
print(clf)
clf.fit(train_dataSet,train_labels)
# read test_dataSet
test_dataSet,test_labels = readDataSet('data_test.txt', True)
res = clf.predict(test_dataSet)
# 输出预测结果,保存到model_1.txt
mf = open('model_1.txt','w')
for i in range(len(res)):
mf.write(str(res[i]) + '\n')
mf.close()
使用KNeighborsClassifier
的实现代码
import numpy as np
from sklearn import neighbors
# 在此插入公用代码
# read dataSet
train_dataSet,train_labels = readDataSet('data_train.txt', False)
knn = neighbors.KNeighborsClassifier(algorithm='kd_tree', n_neighbors=3)
print(knn)
knn.fit(train_dataSet,train_labels)
# read test_dataSet
test_dataSet,test_labels = readDataSet('data_test.txt', True)
res = knn.predict(test_dataSet)
# 输出预测结果,保存到model_2.txt
mf = open('model_2.txt','w')
for i in range(len(res)):
mf.write(str(res[i]) + '\n')
mf.close()
使用GaussianNB
的实现代码
import numpy as np
from sklearn.naive_bayes import GaussianNB
# 在此插入公用代码
# read dataSet
train_dataSet,train_labels = readDataSet('data_train.txt', False)
gnb = GaussianNB(priors=None)
gnb.fit(train_dataSet,train_labels)
# read test_dataSet
test_dataSet,test_labels = readDataSet('data_test.txt', True)
res = gnb.predict(test_dataSet)
# 输出预测结果,保存到model_3.txt
mf = open('model_3.txt','w')
for i in range(len(res)):
mf.write(str(res[i]) + '\n')
mf.close()