Numpy 如何使阵列适合sklearn?

Numpy 如何使阵列适合sklearn?,numpy,svm,Numpy,Svm,我想将两个np数组提供给sklearn svm。我有两组数据 group1 = [[0.067, 0.21], [0.092, 0.21], [0.294, 0.445], [0.227, 0.521], [0.185, 0.597], [0.185, 0.689], [0.235, 0.748], [0.319, 0.773], [0.387, 0.739], [0.437, 0.672], [0.496, 0.739], [0.571, 0.773], [0.639,

我想将两个np数组提供给sklearn svm。我有两组数据

group1 = [[0.067, 0.21], [0.092, 0.21], 
  [0.294, 0.445], [0.227, 0.521], [0.185, 0.597], 
  [0.185, 0.689], [0.235, 0.748], [0.319, 0.773], 
  [0.387, 0.739], [0.437, 0.672], [0.496, 0.739],
  [0.571, 0.773], [0.639, 0.765], [0.765, 0.924],
  [0.807, 0.933], [0.849, 0.941]]

group2 = [[0.118, 0.143], [0.118, 0.176], 
  [0.345, 0.378], [0.395, 0.319], [0.437, 0.261],
  [0.496, 0.328], [0.546, 0.395], [0.605, 0.462],
  [0.655, 0.529], [0.697, 0.597], [0.706, 0.664],
  [0.681, 0.723], [0.849, 0.798], [0.857, 0.849],
  [0.866, 0.899]]
每组有15和16个元素长。我该如何把它放到一个SVM中,它会给我一个分离这两个数字的方程

我试图将第2组的平均值填入末尾,然后将它们连接到一个64样本1D数组中。但是我无法得到clf.fit中的y向量来处理我制作的数组

到目前为止我所拥有的

from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")

group1 = [[0.067, 0.21], [0.092, 0.21], 
  [0.294, 0.445], [0.227, 0.521], [0.185, 0.597], 
  [0.185, 0.689], [0.235, 0.748], [0.319, 0.773], 
  [0.387, 0.739], [0.437, 0.672], [0.496, 0.739],
  [0.571, 0.773], [0.639, 0.765], [0.765, 0.924],
  [0.807, 0.933], [0.849, 0.941]]

group2 = [[0.118, 0.143], [0.118, 0.176], 
  [0.345, 0.378], [0.395, 0.319], [0.437, 0.261],
  [0.496, 0.328], [0.546, 0.395], [0.605, 0.462],
  [0.655, 0.529], [0.697, 0.597], [0.706, 0.664],
  [0.681, 0.723], [0.849, 0.798], [0.857, 0.849],
  [0.866, 0.899]]
    def print_group(group):
        for i in group:
            for j in i:
                print j


    #print_group(group1)
    len_group1=str(len(group1))
    len_group2=str(len(group2))

    #c = " ".join([a, b])
    print "length of group 1" + " " + len_group1 + " " + "units in group 1"
    print "length of group 2" + " " + len_group2 + " " + "units in group 2"

    np_1= np.array(group1)
    np_2= np.array(group2)

    mean1, std1 = np.mean(np_1), np.std(np_1)
    mean2, std2 = np.mean(np_2), np.std(np_2)
    mean2_a=np.array(mean2)

    np22=np.append(mean2_a, np_2)
    np22=np.append(mean2_a, np22)




    np1=np_1.ravel().reshape(32,1)
    np2=np22.ravel().reshape(32,1)

    #
    #print(mean1, std1)
    #print(mean2, std2)
    #


    np3=np.concatenate((np1,np2))
    #plt.scatter(np_1, np_2)
    #plt.show()
    #
    #np11=np1.reshape(1,-1)
    #np22=np2.reshape(1,-1)

    #np.append(np2,mean2)
    #np.append(np2,mean2)

    clf = svm.SVC(gamma='scale')
    classified_array= np.zeros((64, 0))
    clf.fit([np3],[classified_array])

File "<ipython-input-39-50dcfc391d51>", line 1, in <module>
    runfile('C:/Users/AliDesktop/Desktop/Magic Briefcase/Jobs/StarMind.py', wdir='C:/Users/AliDesktop/Desktop/Magic Briefcase/Jobs')

  File "C:\Users\AliDesktop\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)

  File "C:\Users\AliDesktop\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)

  File "C:/Users/AliDesktop/Desktop/Magic Briefcase/Jobs/StarMind.py", line 76, in <module>
    clf.fit([np3],[classified_array])

  File "C:\Users\AliDesktop\Anaconda2\lib\site-packages\sklearn\svm\base.py", line 151, in fit
    X, y = check_X_y(X, y, dtype=np.float64, order='C', accept_sparse='csr')

  File "C:\Users\AliDesktop\Anaconda2\lib\site-packages\sklearn\utils\validation.py", line 521, in check_X_y
    ensure_min_features, warn_on_dtype, estimator)

  File "C:\Users\AliDesktop\Anaconda2\lib\site-packages\sklearn\utils\validation.py", line 405, in check_array
    % (array.ndim, estimator_name))

ValueError: Found array with dim 3. Estimator expected <= 2.
从sklearn导入svm
将numpy作为np导入
将matplotlib.pyplot作为plt导入
从matplotlib导入样式
样式。使用(“ggplot”)
第1组=[[0.067,0.21],[0.092,0.21],
[0.294, 0.445], [0.227, 0.521], [0.185, 0.597], 
[0.185, 0.689], [0.235, 0.748], [0.319, 0.773], 
[0.387, 0.739], [0.437, 0.672], [0.496, 0.739],
[0.571, 0.773], [0.639, 0.765], [0.765, 0.924],
[0.807, 0.933], [0.849, 0.941]]
第二组=[[0.118,0.143],[0.118,0.176],
[0.345, 0.378], [0.395, 0.319], [0.437, 0.261],
[0.496, 0.328], [0.546, 0.395], [0.605, 0.462],
[0.655, 0.529], [0.697, 0.597], [0.706, 0.664],
[0.681, 0.723], [0.849, 0.798], [0.857, 0.849],
[0.866, 0.899]]
def打印组(组):
对于我所在的小组:
对于i中的j:
打印j
#打印组(组1)
len_group1=str(len(group1))
len_group2=str(len(group2))
#c=”“.加入([a,b])
打印“组1的长度”+“”+len_组1+“”+“组1中的单位”
打印“组2的长度”+“”+len_组2+“”+“组2中的单位”
np_1=np.数组(组1)
np_2=np.数组(组2)
平均值1,std1=np.平均值(np_1),np.标准值(np_1)
平均值2,std2=np.平均值(np_2),np.标准值(np_2)
平均2_a=np.数组(平均2)
np22=np.append(平均值2_a,np_2)
np22=np.追加(平均2_a,np22)
np1=np_1.ravel().重塑(32,1)
np2=np22.ravel().重塑(32,1)
#
#打印(平均值1,std1)
#打印(平均值2,std2)
#
np3=np.连接((np1,np2))
#plt.散射(np_1,np_2)
#plt.show()
#
#np11=np1。重塑(1,-1)
#np22=np2。重塑(1,-1)
#np.追加(np2,平均值2)
#np.追加(np2,平均值2)
clf=svm.SVC(gamma='scale')
分类数组=np.0((64,0))
clf.fit([np3],[classified_array])
文件“”,第1行,在
运行文件('C:/Users/AliDesktop/Desktop/Magic公文包/Jobs/StarMind.py',wdir='C:/Users/AliDesktop/Desktop/Magic公文包/Jobs')
文件“C:\Users\AliDesktop\Anaconda2\lib\site packages\spyder\utils\site\sitecustomize.py”,第866行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\AliDesktop\Anaconda2\lib\site packages\spyder\utils\site\sitecustomize.py”,第87行,在execfile中
exec(编译(脚本文本,文件名,'exec'),glob,loc)
文件“C:/Users/AliDesktop/Desktop/Magic公文包/Jobs/StarMind.py”,第76行,在
clf.fit([np3],[classified_array])
文件“C:\Users\AliDesktop\Anaconda2\lib\site packages\sklearn\svm\base.py”,第151行,在fit中
十、 y=check_X_y(X,y,dtype=np.float64,order='C',accept_sparse='csr')
文件“C:\Users\AliDesktop\Anaconda2\lib\site packages\sklearn\utils\validation.py”,第521行,在check\X\u y中
确保\u最小\u功能,警告\u数据类型,估计器)
文件“C:\Users\AliDesktop\Anaconda2\lib\site packages\sklearn\utils\validation.py”,第405行,在check\u数组中
%(array.ndim,估计器名称))

ValueError:找到具有dim 3的数组。估计量期望据我所知,组1和组2属于两个不同的类别,所以我们有二元分类问题。让我们来解决它

from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt

group1 = np.array([[0.067, 0.21], [0.092, 0.21], 
  [0.294, 0.445], [0.227, 0.521], [0.185, 0.597], 
  [0.185, 0.689], [0.235, 0.748], [0.319, 0.773], 
  [0.387, 0.739], [0.437, 0.672], [0.496, 0.739],
  [0.571, 0.773], [0.639, 0.765], [0.765, 0.924],
  [0.807, 0.933], [0.849, 0.941]])

group2 = np.array([[0.118, 0.143], [0.118, 0.176], 
  [0.345, 0.378], [0.395, 0.319], [0.437, 0.261],
  [0.496, 0.328], [0.546, 0.395], [0.605, 0.462],
  [0.655, 0.529], [0.697, 0.597], [0.706, 0.664],
  [0.681, 0.723], [0.849, 0.798], [0.857, 0.849],
  [0.866, 0.899]])

# Choose appropriate C
clf = svm.SVC(kernel='linear', C=100)

clf.fit(X, y)

plt.plot(group1[:,0], group1[:,1], 'ro', group2[:,0], group2[:,1], 'bx')
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx = np.linspace(xlim[0], xlim[1], 20)
yy = np.linspace(ylim[0], ylim[1], 20)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = clf.decision_function(xy).reshape(XX.shape)
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
           linestyles=['--', '-', '--'])
ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,
           linewidth=1, facecolors='none', edgecolors='k')
plt.show()  

我要做的第一件事是正确标记数据点。如果为clf分配变量,您将开始看到问题

X, y = np3, classified_array
您将看到数据和目标向量不正确。我会试着用这些线来解决这个问题

group_data = [i+[0] for i in group1] + [i+[1] for i in group2]
df = pd.DataFrame(data=group_data, columns=['x','y','target'])
这将为组1创建标签0,为组2创建标签1。然后你可以这样分配你的数据

X,y = df[['x','y']].values, df.target.values

这令人困惑。我不确定我自己能想出这个解决办法。对于第2组中的i:[i+[]1]对于第2组中的[0.118,0.143]:这令人困惑。我不确定我自己能想出这个解决办法。[对于第2组中的i:[i+[1]][对于第2组中的[0.118,0.143]:[0.118,0.143]+1]这是正确的逻辑?这是一种列表理解,它使创建列表更加简洁。对于group1的每个元素,可以将group_数据的第一项读取为append 0。之所以可以这样做,是因为group1的每个元素都是一个可以追加的列表。组_数据的每一项都是一个列表,因此它们可以以相同的方式追加。这将为您提供SVC模型所需的数据集。只是澄清一下,我不需要将数据转换为dataframe。我本可以编写以下X=np.array(groupu数据)[:,[0,1]]和y=np.array(groupu数据)[:,2]您将看到它们等价于X,y=df[['X','y']].values,df.target.values