-3
當前正在編寫一些機器學習,其中我使用了sklearn,numpy和scipy。我能夠解析我的數據庫並準備數據集。但是來預測時,輸出的結果,我收到以下錯誤:TypeError:'tuple'對象不可調用Python
類型錯誤:「元組」對象不是可調用
我的代碼如下:
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import SGDClassifier
from sklearn import tree
from sklearn import gaussian_process
from sklearn import neural_network
from sklearn import preprocessing
from time import time
import numpy as np
t0 = time()
classifier = int(input(
"""
Enter number corresponding to classifier you would like to use:
1. Support Vector Machines
2. Gaussian Naive Bayes
3. Multinomial Naive Bayes
4. Stochastic Gradient Descent with Logistic Regression loss function
"""))
dataset = int(input(
"""
Enter number corresponding to data set you would like to use:
1. First half and second half
2. Alternating
3. Alternating with attack type
4. Alternating with attack type and target type
"""))
# Assign appropriate datasets
input_files = ['half', 'alternating', 'alternating-with-attacktype', 'alternating-all']
filename = input_files[dataset-1]
# Instantiate arrays for inputs and outputs
train_inputs = []
train_outputs = np.array([])
test_inputs = []
test_expected_outputs = np.array([])
test_actual_outputs = []
X = np.array([])
# Read training file
print ('Reading training file')
t = time()
for line in open('datasets/%s-train.txt' % filename):
inputs = line.split(' ')
outputs = inputs.pop()
train_outputs = np.append(train_outputs, int(outputs))
print ('Done. Time taken: %f secs.\n' % (time()-t))
# for line in open('datasets/%s-train.txt' % filename):
# inputs = line.split(' ')
# output = inputs.pop()
# train_outputs = np.append(train_outputs, int(output))
# print ('Done. Time taken: %f secs.\n' % (time()-t))
print ('Create classifier')
t = time()
clf = None
# No preprocessing for SVMs
# Otherwise, scale inputs (preprocessing to make more amenable for machine learning)
if classifier == 1: # Support vector machines
clf = SVC()
elif classifier == 2: # Gaussian Naive Bayes
train_inputs = preprocessing.scale(np.array(train_inputs))
clf = GaussianNB()
elif classifier == 3: # Multinomial Naive Bayes
clf = MultinomialNB()
elif classifier == 4: # Stochastic gradient descent with logistic regression
train_inputs = preprocessing.scale(np.array(train_inputs))
clf = SGDClassifier(loss='log')
print ('Done. Time taken: %f secs.\n' % (time()-t))
print ('Fit classifier')
t = time()
X.shape(1 -1)
clf.fit(train_inputs, train_outputs)
print ('Done. Time taken: %f secs.\n' % (time()-t))
# Read test file and scale inputs
print ('Reading test file')
t = time()
for line in open('datasets/%s-test.txt' % filename):
inputs = line.split(' ')
output = inputs.pop()
test_expected_outputs = np.append(test_expected_outputs, int(output))
test_inputs.append(map(float, inputs))
# Same here: no preprocessing for SVMs
# Otherwise, scale inputs (preprocessing to make more amenable for machine learning)
if classifier != 1:
test_inputs = preprocessing.scale(np.array(test_inputs))
print ('Done. Time taken: %f secs.\n' % (time()-t))
print ('Predict for test file')
t = time()
test_actual_outputs = [clf.predict(i)[0] for i in test_inputs]
print ('Done. Time taken: %f secs.\n' % (time()-t))
print ('Compare outputs')
t = time()
right = sum(test_actual_outputs == test_expected_outputs)
wrong = len(test_actual_outputs) - right
print ('Done. Time taken: %f secs.\n' % (time()-t))
print ('Number right: %d\nNumber wrong: %d' % (right, wrong))
print ('Prediction rate: %.2f%%' % (100.0 * right/len(test_actual_outputs)))
print ('Total time taken: %f secs.\n' % (time()-t0))
我知道我需要添加array.reshape(-1 1)或array.reshape(1 -1),但不知道這會做什麼。
任何關於如何解決這個問題的建議都會受到歡迎。
請:一[MCVE。你也*絕對*必須在你的問題中提供**完整的追溯**。 –
什麼是完整的回溯,所以我們可以看到什麼引發了錯誤,而無需挖掘代碼? – roganjosh
1.這是一個很長的程序 - 嘗試創建一個最小的,最好是自包含的例子,它重現了錯誤 2.發佈完整的錯誤消息(不清楚程序在哪一行失敗) 3.試着步入帶有調試器的程序 - 它可能會幫助你理解問題所在 –