Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python机器学习-多类测试脚本_Python_Machine Learning_Svm - Fatal编程技术网

Python机器学习-多类测试脚本

Python机器学习-多类测试脚本,python,machine-learning,svm,Python,Machine Learning,Svm,我对机器学习非常陌生,目前我正在构建/运行一个脚本,对多个分类器测试一个数据集,以找出哪一个提供了最佳拟合/最高精度,然后使用该分类器进行预测 到目前为止,当我运行脚本时,我得到了非常高的分数,大约98%-99%。我只是想确保这些高分不是因为我的错误。我认为我已经涵盖了所有基础,我正在使用交叉验证,对照混淆矩阵等进行检查。但正如我所说,我对这一点还不熟悉 我的代码如下 import csv import pandas import numpy as np import sklearn.ensem

我对机器学习非常陌生,目前我正在构建/运行一个脚本,对多个分类器测试一个数据集,以找出哪一个提供了最佳拟合/最高精度,然后使用该分类器进行预测

到目前为止,当我运行脚本时,我得到了非常高的分数,大约98%-99%。我只是想确保这些高分不是因为我的错误。我认为我已经涵盖了所有基础,我正在使用交叉验证,对照混淆矩阵等进行检查。但正如我所说,我对这一点还不熟悉

我的代码如下

import csv
import pandas
import numpy as np
import sklearn.ensemble as ske
import operator
from sklearn import model_selection, tree, linear_model, svm
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.feature_selection import SelectFromModel
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB


# Load dataset
url = 'four_During_1000.csv'
dataset = pandas.read_csv(url)
#dataset.set_index('Name', inplace = True)
dataset.drop('Name', axis = 1, inplace=True)

# Split-out validation dataset
X = dataset.drop(['Legitimate'], axis=1).values
Y = dataset['Legitimate'].values
seed = 7
scoring = 'accuracy'


print('Researching important feature based on %i total features\n' % X.shape[1])

# Feature selection using Trees Classifier
fsel = ske.ExtraTreesClassifier().fit(X, Y)
mdl = SelectFromModel(fsel, prefit=True)
X_new = mdl.transform(X)
nb_features = X_new.shape[1]

features = []

print('%i features identified as important:' % nb_features)

indices = np.argsort(fsel.feature_importances_)[::-1][:nb_features]
for f in range(nb_features):
    print("%d. feature %s (%f)" % (f + 1, dataset.columns[2+indices[f]],
                                   fsel.feature_importances_[indices[f]]))

# XXX : take care of the feature order
for f in sorted(np.argsort(fsel.feature_importances_)[::-1][:nb_features]):
    features.append(dataset.columns[2+f])
print("\n")

X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(
    X_new, Y ,test_size=0.2, random_state=seed)

# create dict for models
models = {
    "LR" : linear_model.LogisticRegression(),
    "KNN": KNeighborsClassifier(),
    "DecisionTree": tree.DecisionTreeClassifier(),
    "RandomForest": ske.RandomForestClassifier(),
    "GradientBoosting": ske.GradientBoostingClassifier(),
    "AdaBoost": ske.AdaBoostClassifier(),
    "GNB": GaussianNB(),
    "SVC": svm.SVC(),
    "SVM": svm.OneClassSVM(),
    }

# evaluate each model in turn
results = []
score = {}
for name in models:
        clf = models[name]        
        kfold = model_selection.KFold(n_splits=10, random_state=seed)
        cv_results = model_selection.cross_val_score(clf, X_train,
                                                     Y_train, cv=kfold, scoring=scoring)
        results.append(cv_results)
        msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
        score[name] = cv_results.mean()
        print(msg)
print("\n")

winner = max(score, key=score.get)
print('\nWinner algorithm is %s with a %f %% success' % (winner, score[winner]*100))
print("\n")

# Make predictions on validation dataset
clf = models[winner]
clf.fit(X_train, Y_train)
#score1 = clf.score(X_validation, Y_validation)
predictions = clf.predict(X_validation)
print(accuracy_score(Y_validation, predictions))
print(classification_report(Y_validation, predictions))
mt = confusion_matrix(Y_validation, predictions)
print("False positive rate : %f %%" % ((mt[0][1] / float(sum(mt[0])))*100))
print('False negative rate : %f %%' % ( (mt[1][0] / float(sum(mt[1]))*100)))
我的问题是,任何人都可以看到我可能做错了什么,或者我可以做得更好?顺便说一句,目前我的数据样本相当小(1000),但我正在努力增加数据集的大小

编辑:

以下链接包含my.csv文件中保存的数据(包含在上面)


欢迎来到StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。@Prune,这是我代码的精确副本和完整副本,但我使用的分类器除外(因为我觉得它们与交叉验证等主题没有多大关系),不过,我现在将编辑并添加这些内容。我在示例中看到的主要问题是
'four\u During_1000.csv':找不到文件
,或一些类似的消息。@Prune,这是我正在使用的保存数据集的.csv文件。。。可以简单地用sklearn库(如iris数据集或pama数据集)交换这些数据。但是这些都是非常小的集合,但是我相信它们被加载到了sklearn中。@Prune,不用担心,我已经添加了一个指向代码共享站点的链接,其中包含了我的.csv文件的内容,所以所有人需要做的就是复制、粘贴和保存以100%复制我的数据。。。似乎是最准确的测试方法,如前所述,我认为sklearn数据集太小了。