一般来说,我对机器学习和 python 非常陌生,我正在尝试将决策树分类器应用于我正在处理的数据集。
我想用这个模型在用某些细胞特征训练它后预测结果。训练数据由结果列组成,分别将活/死细胞描述为 1 和 0。额外的列是我用于训练的蜂窝特征。
但是,我不确定如何应用我的最终模型并将其引入新数据。我想做的是让它预测“结果”选项卡(0和1值),通过给它“ASA”、“ASC”、“ASMR”、“IMIH”、“IMIA”、“TCH”的值' 在新数据集中。
我还希望它转换这些预测,并可能将它们添加到 .csv 文件中以供以后使用,但我不知道该怎么做。
这是我一直在使用的代码,我在接近结尾的部分(“加载测试数据集”)遇到问题,我认为我做错了,但我添加了完整的代码作为澄清。
import pandas
from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
import numpy
file = '/Users/Aida/Desktop/AlivevsDeadTest_Improved.csv'
names = ['Result', 'ASA', 'ASC', 'ASMR', 'IMIH', 'IMIA', 'TCH']
dataset = pandas.read_csv(file, names=names)
# Peek at the data
print(dataset.head(21))
# Statistical summary
print(dataset.describe())
# Split-out validation dataset
array = dataset.values
X = array[1:,1:10]
Y = array[1:,0]
validation_size = 0.20
seed = 7
X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)
# Test options and evaluation metric
seed = 7
scoring = 'accuracy'
# Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))
# Evaluate each model in turn
results = []
names = []
for name, model in models:
kfold = model_selection.KFold(n_splits=10, random_state=seed)
cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
print(msg)
# Compare Algorithms
fig = plt.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
plt.show()
# Make predictions on validation dataset
cart = DecisionTreeClassifier()
cart.fit(X_train, Y_train)
predictions = cart.predict(X_validation)
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))
# Finalize model
import pickle
cart_model = DecisionTreeClassifier()
cart_model.fit(X_train, Y_train)
# Save model to disk
filename = 'Final_Model.sav'
pickle.dump(cart_model, open(filename, 'wb'))
# Load model from disk and use it to make new predictions
loaded_model = pickle.load(open(filename, 'rb'))
result = loaded_model.score(X_validation, Y_validation)
print(result)
# Load test dataset
final_predict = numpy.loadtxt("AlivevsDead_Final.csv", delimiter=";")
X_train = final_predict
pred = cart_model.predict(X_train)
print(pred)
当我运行这个脚本时,它给了我一个错误,它看起来像这样:
Traceback (most recent call last):
File "C:/Users/Aida/Desktop/tennistesting.py", line 89, in <module>
final_predict = numpy.loadtxt("AlivevsDead_Final.csv", delimiter=";")
ValueError: could not convert string to float: 'Result,ASA,ASC,ASMR,IMIH,IMIA,TCH'
据我了解,机器学习由 3 个步骤组成,包括训练、验证以及最后将其应用于新数据集以执行预测。我只是不知道如何引入这个新数据集并让模型对其进行预测。
当我运行模型时,我要求它显示一小部分数据集作为说明,这可以在下面找到。
Result ASA ASC ... IMIH IMIA TCH
0 Result ASA ASC ... IMIH IMIA TCH
1 1 84 1.275275533 ... 0.650034902 0.000235479 4.126984127
2 1 218 1.020682416 ... 0.339955874 0.000535448 8.125748503
3 1 207 1.453129647 ... 0.575357024 0.00061345 5.629370629
4 1 106 1.088015726 ... 0.729552852 0.000135923 7.162162162
如果这是一个愚蠢的问题,我很抱歉!我对这一切都很陌生,并希望是否有人可以帮助我了解它是如何正确完成的。
提前致谢!