我有一个数据集,它实际上是一些项目特征向量的出现矩阵。从理论上讲,这种表示形式有助于将机器学习算法应用于数据集,因为它是标准化的。
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,class1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,class10,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,class20,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,class21,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,class3
但是,我似乎无法使用pandas和scikit-learn在Python中提供的算法。我没有看到任何例子。
数据集的格式如下。其中特征vector =[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]
,类变量位于文件末尾,显示类别(例如:’class1’、’class2’、’class3’)。
如何对这种类型的数据集应用决策树算法,如CART和朴素贝叶斯?(我只检查了scikit-learn库)
回答:
您需要为类/因变量使用整数,而不是字符串。
这是一个例子:
In [1]: # 这里我只是简单地映射,如果您有很多类,您可以使用正则表达式或其他方法df['class'] = df['class'].map({'class1':0, 'class2':1, 'class3':2})In [2]: dfOut[2]: a b ... y z class0 1 ... 1 1 01 0 ... 0 1 12 0 ... 0 1 1 3 1 ... 0 1 2In [3]: # 将X(独立变量)和y(因变量,类)分开X = df.iloc[:,:-1]y = df['class']In [4]: # 现在您可以进行拟合等操作...from sklearn.naive_bayes import GaussianNBgnb = GaussianNB()result = gnb.fit(X,y)In [5]:y_pred = result.predict(X)y_predOut[5]: array([0, 1, 1, 2], dtype=int64)
我们看到它正确预测了类别(显然考虑到特征数量与样本大小相比(p>n))。