2016-03-29 5 views
0

Ich lerne maschinelles Lernen in Python und mit Scikit lernen Paket. Ich habe R bereits für diesen Zweck verwendet und finde seine Datenstruktur sehr einfach. Scikit learn benutzt numpy array, was ich etwas schwierig finde. In Python haben wir Pandas, die dem R-Dataframe ähnlich sind. Dieser Code stammt aus dieser website.Wie SVM Regression in Iris-Datensatz mit Pandas zu verwenden

R

library(e1071) 
library(MASS) 
data(iris) 

mysvm <- svm(Species ~ ., iris) 
mysvm.pred <- predict(mysvm, iris) 
table(mysvm.pred,iris$Species) 
# mysvm.pred setosa versicolor virginica 
# setosa  50  0   0 
# versicolor 0  48   2 
# virginica 0  2   48 

Python

from sklearn import svm, datasets 
from sklearn.metrics import confusion_matrix 
iris = datasets.load_iris() 

mysvm = svm.SVC().fit(iris.data, iris.target) 
mysvm_pred = mysvm.predict(iris.data) 
print confusion_matrix(mysvm_pred, iris.target) 
# [[50 0 0] 
# [ 0 48 2] 
# [ 0 0 50]] 

Wie kann ich über Python-Code verwenden, um mit Pandas Datenrahmen und verwenden SVM Regression

EDITED

Dies ist, was ich

getan haben
from sklearn import svm, datasets 
from sklearn.metrics import confusion_matrix 
import pandas as pd 
iris = datasets.load_iris() 
X=pd.DataFrame(iris.data,columns=iris.feature_names) 
y=pd.DataFrame(iris.target) 
X.head() 
y.head() 
mysvm = svm.SVC().fit(X,y) 
mysvm_pred = mysvm.predict(X) 
print confusion_matrix(mysvm_pred, y) 

Aber seine geben diesen Fehler

>>> mysvm = svm.SVC().fit(X,y) 
/usr/local/lib/python2.7/dist-packages/sklearn/svm/base.py:514: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel(). 
    y_ = column_or_1d(y, warn=True) 
>>> mysvm_pred = mysvm.predict(X) 
>>> print confusion_matrix(mysvm_pred, y) 
/usr/local/lib/python2.7/dist-packages/numpy/core/fromnumeric.py:2645: VisibleDeprecationWarning: `rank` is deprecated; use the `ndim` attribute or function instead. To find the rank of a matrix see `numpy.linalg.matrix_rank`. 
    VisibleDeprecationWarning) 
[[50 0 0] 
[ 0 48 0] 
[ 0 2 50]] 

Antwort

1

Sie Kreuzvalidierung wie diese verwenden:

from sklearn import svm, datasets, cross_validation 
from sklearn import metrics 
import pandas as pd 

clf = svm.SVC() 
cv_scores = cross_validation.cross_val_score(clf,iris.data,iris.target,cv=10) 
cv_preds = cross_validation.cross_val_predict(clf,iris.data,iris.target,cv =10) 

Ich bin nicht sicher, was Sie mit Pandas tun wollen, aber wenn Sie möchten, laden der Datensatz zu einem Pandas-Datenrahmen können Sie es so tun:

clf.fit(iris.data,iris.target) 
preds = clf.predict(iris.data) 

df = pd.DataFrame(iris.data) 
df['target'] = iris.target 
df['preds'] = preds 

print(df) 
print confusion_matrix(df['target'],df['preds']) 

zu berechnen Genauigkeit:

accuracy = metrics.accuracy_score(iris.target, preds) 
print(accuracy)