Az osztályozási algoritmus két különböző megközelítését szeretném összekeverni, mint ez a dokumentációs példa. Ezt próbáltam:
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
tfidf_vect= TfidfVectorizer(use_idf=True, smooth_idf=True, sublinear_tf=False, ngram_range=(2,2))
import pandas as pd
df = pd.read_csv('/data.csv',
header=0, sep=',', names=['SentenceId', 'Sentence', 'Sentiment'])
X = tfidf_vect.fit_transform(df['Sentence'].values)
y = df['Sentiment'].values
from sklearn import cross_validation
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,
y, test_size=0.33)
from sklearn.svm import SVC
#first svm
clf = SVC(kernel='linear')
clf.fit(reduced_data, y)
prediction = clf.predict(X_test)
w = clf.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(-10, 10)
yy = a * xx - clf.intercept_[0] / w[1]
# get the separating hyperplane using weighted classes
#second svm
wclf = SVC(kernel='linear', class_weight={5: 10},C=1000)
wclf.fit(reduced_data, y)
weighted_prediction = wclf.predict(X_test)
#PCA
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X)
ww = wclf.coef_[0]
wa = -ww[0] / ww[1]
wyy = wa * xx - wclf.intercept_[0] / ww[1]
# plot separating hyperplanes and samples
import matplotlib.pyplot as plt
h0 = plt.plot(xx, yy, 'k-', label='no weights')
h1 = plt.plot(xx, wyy, 'k--', label='with weights')
plt.scatter(reduced_data[:, 0], reduced_data[:, 1], c=y, cmap=plt.cm.Paired)
plt.legend()
plt.axis('tight')
plt.show()
De a következő kivételt kapom:
Traceback (most recent call last):
File "file.py", line 25, in <module>
a = -w[0] / w[1]
File "/usr/local/lib/python2.7/site-packages/scipy/sparse/csr.py", line 253, in __getitem__
return self._get_row_slice(row, col)
File "/usr/local/lib/python2.7/site-packages/scipy/sparse/csr.py", line 320, in _get_row_slice
raise IndexError('index (%d) out of range' % i)
IndexError: index (1) out of range
Hogyan ábrázolhatom helyesen ezt a feladatot 2-D vagy 3D-ben a matplotlib segítségével?. Ezt is próbáltam, de egyértelműen ez rossz:
Előre is köszönöm, ezek az adatok, amelyeket ehhez használok.
Amikor nyomtatok w
, ez történik:
(0, 911) -0.352103548716
a = -w[0] / w[1]
(0, 2346) -1.20396753467
File "/usr/local/lib/python2.7/site-packages/scipy/sparse/csr.py", line 253, in __getitem__
(0, 2482) -0.352103548716
(0, 2288) -0.733605938797
(0, 1175) -0.868966214318
(0, 1936) -0.500071158622
(0, 2558) -0.40965370142
(0, 788) -0.485330735934
(0, 322) -0.575610464517
(0, 453) -0.584854414882
(0, 1913) -0.300076915818
(0, 2411) -0.419065159403
(0, 2017) -0.407926583824
(0, 2363) -0.407926583824
(0, 815) -1.09245625795
(0, 543) -0.248207856236
(0, 1082) -0.366433457602
(0, 1312) -0.286768829333
(0, 1525) -0.286768829333
(0, 1677) -0.286768829333
(0, 2679) -0.688619491265
(0, 413) -0.101096807406
(0, 1322) -0.13561265293
(0, 1488) -0.120403497624
(0, 1901) -0.337806267742
: :
(0, 1609) 0.100116485705
(0, 581) 0.276579777388
(0, 2205) 0.241642287418
(0, 1055) 0.0166785719624
(0, 2390) 0.349485515339
(0, 1866) 0.357035248059
(0, 2098) 0.296454010725
(0, 2391) 0.45905660273
(0, 2601) 0.357035248059
(0, 619) 0.350880030278
(0, 129) 0.287439419266
(0, 280) 0.432180530894
(0, 1747) -0.172314049543
(0, 1211) 0.573579514463
(0, 86) 0.3152907757
(0, 452) 0.305881204557
(0, 513) 0.212678772368
(0, 946) -0.347372778859
(0, 1194) 0.298193025133
(0, 2039) 0.34451957335
(0, 2483) 0.245366213834
(0, 317) 0.355996551812
(0, 977) 0.355996551812
(0, 1151) 0.284383826645
(0, 2110) 0.120512273328
Nagyon nagy, ritka mátrixot adott vissza.
print w
, és nézze meg, milyen értéket tárol a rendszer. Ahhoz, hogy a jelenlegia = -w[0] / w[1]
ne hibásodjon, hasonlítania kell a[number, number]
-ra. 26.02.2015reduced_data.shape, y.shape, X_test.shape, X_train.shape
így néznek ki:(2599, 11991) (2599,) (858, 11991) (1741, 11991)
26.02.2015w = clf.coef_[0]
print w
a = -w[0] / w[1]
megmutatni, hogy mi van a "w"-ben tárolva, mielőtt a következő sorban hibázik. Az adatoknak kell két értéket felosztani aa = -w[0] / w[1]
sor szerint. Ha a fenti(2599,)
második értéket használja, hiba lép fel. Ellenőrizném az értékeket, mielőtt megpróbálnám a matematikát. 26.02.2015