2017-04-27 42 views
0

我從比賽中獲得了一些有趣的用戶數據。我知道各個運動員何時計劃完成一場比賽,我知道他們什麼時候完成了比賽(接近更多的東西)。目標是找出運動員何時遲到。我想爲每個運動員運行一個支持向量機,並繪製決策邊界。如何在pandas col中循環並運行並繪製scikit模型?

這裏是我做的:

import numpy as np 
import pandas as pd 
from sklearn import svm 
from mlxtend.plotting import plot_decision_regions 
import matplotlib.pyplot as plt 


# Create arbitrary dataset for example 
df = pd.DataFrame({'User': np.random.random_integers(low=1, high=4, size=50), 
        'Planned_End': np.random.uniform(low=-5, high=5, size=50), 
        'Actual_End': np.random.uniform(low=-1, high=1, size=50), 
        'Late':  np.random.random_integers(low=0, high=2, size=50)} 
) 

# Fit Support Vector Machine Classifier 
X = df[['Planned_End', 'Actual_End']] 
y = df['Late'] 

clf = svm.SVC(decision_function_shape='ovo') 

for i, y in df['User']: 
    clf.fit(X, y) 
    ax = plt.subplot() 
    fig = plot_decision_regions(X=X, y=y, clf=clf, legend=2) 
    plt.title(lab) 
plt.show() 

我得到以下錯誤:TypeError: 'numpy.int64' object is not iterable - 那就是,我有點無法通過列循環。

我想它歸結爲numpy數據格式?我該如何解決這個問題?

回答

1

User系列包含numpy.int64對象,所以你只能使用:

for y in df['User']: 

而且你不使用i任何地方。

對於代碼的其餘部分,這將產生一些解決方案,請相應地編輯:

import numpy as np 
import pandas as pd 
from sklearn import svm 
from mlxtend.plotting import plot_decision_regions 
import matplotlib.pyplot as plt 


# Create arbitrary dataset for example 
df = pd.DataFrame({'User': np.random.random_integers(low=1, high=4, size=50), 
        'Planned_End': np.random.uniform(low=-5, high=5, size=50), 
        'Actual_End': np.random.uniform(low=-1, high=1, size=50), 
        'Late':  np.random.random_integers(low=0, high=2, size=50)} 
) 

# Fit Support Vector Machine Classifier 
X = df[['Planned_End', 'Actual_End']].as_matrix() 
y = df['Late'] 

clf = svm.SVC(decision_function_shape='ovo') 


y = df['User'].values 
clf.fit(X, y) 
ax = plt.subplot() 
fig = plot_decision_regions(X=X, y=y, clf=clf, legend=2) 
plt.title('lab') 
plt.show() 
+0

謝謝!我來自一個略有不同的技術堆棧,只是使用了我所知道的語法並試用了它 - 顯然不成功。我認爲我首先使用'y'和''i'確實犯了一個錯誤。我只想穿過運動員 - 確實是'numpy.int64',併爲每個運動員運行clf。不知何故,我無法將其解決。還有什麼提示? – Rachel

+1

希望我的編輯幫助。 – zipa

+0

謝謝 - 這已經有所幫助了。但是,我實際上正試圖爲每位運動員單獨製作一個情節。也就是說,我試圖通過'df ['Athelte']循環併爲每個運動員(本例中爲四個)運行'clf()'和'plt.subplot()'。依賴變量仍然應該是'df ['Late']'因此'y'。 – Rachel

2

嘗試iteritems()

for i, y in df['User'].iteritems(): 
+0

謝謝!到目前爲止我還不太清楚。我嘗試了你的方法,並且在df ['Responsible User']中爲我做了'itterows():'Both returns''Series'object has no attribute'itterows'' – Rachel

+0

對不起,我的錯誤,嘗試iteritems() –

+0

好的,謝謝!我想我到了那裏。我想我需要首先將數據幀轉換爲「np.array」?我收到錯誤'y必須是一維NumPy數組'。 – Rachel