2017-03-10 104 views
2

我正在研究虹膜數據集的模糊c-means聚類,但由於某些錯誤而無法可視化。 Using this tutorial我爲虹膜寫了以下內容,但它顯示名爲「AttributeError:shape」的錯誤。這是我的代碼:使用Iris數據集對Python進行模糊聚類

from sklearn import datasets 
from sklearn.cluster import KMeans 
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import sklearn.metrics as sm 
import skfuzzy as fuzz 

iris = datasets.load_iris() 

x = pd.DataFrame(iris.data, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width']) 
y = pd.DataFrame(iris.target, columns=['Target']) 
plt.figure(figsize=(6, 3)) 

model =fuzz.cluster.cmeans(iris,3,2,error=0.005,maxiter=1000,init=None,seed=None) 
model.fit(x) 
plt.show() 

我認爲在變量模型中傳遞參數將是足夠的,但它顯示以上錯誤。如果可能,你能證明我犯了什麼錯誤嗎?如何解決這個問題?我非常感謝你的幫助!

回答

0

我試着先處理數據,我創建了一個好的情節,我只是按照教程,我執行SVD將維度減少到兩個,然後我開始繪製,似乎只爲教程而已需要兩個維度(x,y)。你不需要做model.fit()我還沒有發現這樣的命令在documentation,這裏是代碼:

import numpy as np, pandas as pd, os 
import matplotlib 
import matplotlib.pyplot as plt 
import itertools 
from sklearn.metrics import confusion_matrix 
import statsmodels.api as sm 
import statsmodels.formula.api as smf 
from sklearn.preprocessing import StandardScaler 
from sklearn.decomposition import [![TruncatedSVD 
from skle][1]][1]arn.preprocessing import Normalizer 
import skfuzzy as fuzz 
from sklearn import datasets 
################################################################################ 
iris = datasets.load_iris() 

x = pd.DataFrame(iris.data, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width']) 
y = pd.DataFrame(iris.target, columns=['Target']) 
scaler = StandardScaler() 
X_std = scaler.fit_transform(x) 
lsa = TruncatedSVD(2, algorithm = 'arpack') 
dtm_lsa = lsa.fit_transform(X_std) 
dtm_lsa = Normalizer(copy=False).fit_transform(dtm_lsa) 
a= pd.DataFrame(dtm_lsa, columns = ["component_1","component_2"]) 
a['targets']=y 
fig1, axes1 = plt.subplots(3, 3, figsize=(8, 8)) 
alldata = np.vstack((a['component_1'], a['component_2'])) 
fpcs = [] 

colors = ['b', 'orange', 'g', 'r', 'c', 'm', 'y', 'k', 'Brown', 'ForestGreen'] 

for ncenters, ax in enumerate(axes1.reshape(-1), 2): 
    cntr, u, u0, d, jm, p, fpc = fuzz.cluster.cmeans(
     alldata, ncenters, 2, error=0.005, maxiter=1000, init=None) 

    # Store fpc values for later plots 
    fpcs.append(fpc) 

    # Plot assigned clusters, for each data point in training set 
    cluster_membership = np.argmax(u, axis=0) 
    for j in range(ncenters): 
     ax.plot(a['component_1'][cluster_membership == j], 
       a['component_2'][cluster_membership == j], '.', color=colors[j]) 

    # Mark the center of each fuzzy cluster 
    for pt in cntr: 
     ax.plot(pt[0], pt[1], 'rs') 

    ax.set_title('Centers = {0}; FPC = {1:.2f}'.format(ncenters, fpc)) 
    ax.axis('off') 

fig1.tight_layout() 
fig1.savefig('iris_dataset.png') 

Iris Data Set

相關問題