【问题标题】:Scikit learn algorithms performing extremely poorlyScikit 学习算法表现极差
【发布时间】:2018-08-20 23:58:27
【问题描述】:

我是 scikit learn 的新手,我的头撞到了墙上。我已经使用了现实世界和测试数据,并且 scikit 算法在预测任何事情时的表现都没有超出机会水平。我尝试过 knn、决策树、svc 和朴素贝叶斯。

基本上,我做了一个测试数据集,由一列 0 和 1 组成,所有 0 的特征都在 0 和 0.5 之间,所有 1 的特征值都在 0.5 和 1 之间。这应该是极好的容易并给出接近 100% 的准确率。但是,没有一种算法的性能高于机会水平。精度范围为 45 至 55 %。我已经尝试为每种算法调整一大堆参数,但注意到有帮助。我认为我的实现存在根本性的问题。

请帮帮我。这是我的代码:

from sklearn.cross_validation import train_test_split
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics import accuracy_score
import sklearn
import pandas
import numpy as np


df=pandas.read_excel('Test.xlsx') 



# Make data into np arrays
y = np.array(df[1])
y=y.astype(float) 
y=y.reshape(399)

x = np.array(df[2])
x=x.astype(float) 
x=x.reshape(399, 1)



# Creating training and test data

labels_train, labels_test = train_test_split(y)
features_train, features_test = train_test_split(x)

#####################################################################
# PERCEPTRON
#####################################################################

from sklearn import linear_model

perceptron=linear_model.Perceptron()

perceptron.fit(features_train, labels_train)

perc_pred=perceptron.predict(features_test)

print sklearn.metrics.accuracy_score(labels_test, perc_pred, normalize=True, sample_weight=None)
print 'perceptron'

#####################################################################
# KNN classifier
#####################################################################
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(features_train, labels_train) 


knn_pred = knn.predict(features_test)


# Accuraatheid

print sklearn.metrics.accuracy_score(labels_test, knn_pred, normalize=True, sample_weight=None) 
print 'knn'


#####################################################################
## SVC
#####################################################################

from sklearn.svm import SVC
from sklearn import svm
svm2 = SVC(kernel="linear")


svm2 = svm.SVC()
svm2.fit(features_train, labels_train)  
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,
gamma=1.0, kernel='linear', max_iter=-1, probability=False, 
random_state=None,
shrinking=True, tol=0.001, verbose=False)



svc_pred = svm2.predict(features_test)

print sklearn.metrics.accuracy_score(labels_test, svc_pred, normalize=True, 
sample_weight=None)

#####################################################################
# Decision tree
#####################################################################
from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features_train, labels_train)

tree_pred=clf.predict(features_test)

# Accuraatheid

print sklearn.metrics.accuracy_score(labels_test, tree_pred, normalize=True, 
sample_weight=None)
print 'tree'

#####################################################################
# Naive bayes
#####################################################################


import sklearn
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(features_train, labels_train)

print "training time:", round(time()-t0, 3), "s"


GaussianNB()
bayes_pred = clf.predict(features_test)



print sklearn.metrics.accuracy_score(labels_test, bayes_pred, 
normalize=True, sample_weight=None)

【问题讨论】:

    标签: algorithm machine-learning scikit-learn


    【解决方案1】:

    你好像用错了train_test_split

    labels_train, labels_test = train_test_split(y)      #WRONG
    features_train, features_test = train_test_split(x)  #WRONG
    

    标签和数据的拆分不必相同。一种手动拆分数据的简单方法:

    randomvec=np.random.rand(len(data))  
    randomvec=randomvec>0.5
    
    train_data=data[randomvec]
    train_label=labels[randomvec]
    test_data=data[np.logical_not(randomvec)]
    test_label=labels[np.logical_not(randomvec)]
    

    或者正确使用scikit方法:

    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.5, random_state=42)
    

    【讨论】:

    • 非常感谢!我使用了最后一种方法,效果很好。你帮了我很多。
    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2016-12-20
    • 2014-04-23
    • 2015-12-22
    相关资源
    最近更新 更多