svc_model(Python)

import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn import preprocessing
from sklearn.model_selection import train_test_split,GridSearchCV,cross_val_score
#特征选择
from sklearn.feature_selection import SelectFromModel,RFE
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
#SVC分类模型
from sklearn.svm import SVC
#模型评价(分类报告/混淆矩阵)
from sklearn.metrics import classification_report,confusion_matrix

dataset = datasets.load_breast_cancer()
features,labels= dataset.feature_names,list(dataset.target_names)
X,y = dataset.data,dataset.target

scaler = preprocessing.StandardScaler()
x = scaler.fit_transform(X)

#基于树的特征选择方法
clf = ExtraTreesClassifier(n_estimators=10,criterion='gini',random_state=1)
clf.fit(x,y)
print('基于树的特征打分结果如下:',clf.feature_importances_)
model = SelectFromModel(clf,prefit=True)
result = model.transform(x)
index = []
for col in range(x.shape[1]):
   if x[0,col] in list(result[0]):
       index.append(col)
print('基于树的特征选择结果:',index)

#基于Logistic回归的特征选择方法(C越小,选择的特征数越少)
clf = LogisticRegression(penalty='l1',dual=False,C=0.1,random_state=1)
clf.fit(x,y)
print('基于Logistic特征打分结果如下:',clf.coef_[0])
model = SelectFromModel(clf,prefit=True)
result = model.transform(x)
index = []
for col in range(x.shape[1]):
    if x[0,col] in list(result[0]):
        index.append(col)
print('基于Logistic的特征选择结果:',index)

#基于LinearSVC的特征选择方法(C越小,选择的特征数越少)
clf = LinearSVC(penalty='l1',dual=False,C=0.1,random_state=1)
clf.fit(x,y)
print('基于SVM特征打分结果如下:',clf.coef_[0])
model = SelectFromModel(clf,prefit=True)
result = model.transform(x)
index = []
for col in range(x.shape[1]):
    if x[0,col] in list(result[0]):
        index.append(col)
print('基于LinearSVC的特征选择结果:',index)

#RFE特征选择方法
model = RFE(LinearSVC(),20)
model.fit(x,y)
index = list(np.arange(x.shape[1])[model.support_])
print('基于RFE特征选择优先级顺序为:',index)

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=1)

#寻找最优参数
param = {'C':[0.001,0.01,0.1,1.0,10,100,1000],'kernel':['poly','rbf','linear','sigmoid'],
                                   'gamma':[0.001,0.005,0.01,0.05,0.1,0.5,1.0]}
model = GridSearchCV(SVC(random_state=1),param)
model.fit(x_train,y_train)
print('最佳模型为:\n',model.best_estimator_)
print('最佳参数为:\n',model.best_params_)

scores = cross_val_score(SVC(C=10,kernel='sigmoid',gamma=0.01),x_train,y_train,cv=10,scoring='accuracy')
print('准确率(交叉验证): ',round(scores.mean(),4))

clf = SVC(C=10,kernel='sigmoid',gamma=0.01)
clf.fit(x_train,y_train)
print('----------------训练集----------------')
train_predict = clf.predict(x_train)
print(classification_report(y_train,train_predict,target_names=labels))
print(pd.DataFrame(confusion_matrix(y_train,train_predict)))

扫描二维码关注公众号,回复: 3122225 查看本文章

print('----------------测试集----------------')
test_predict = clf.predict(x_test)
print(classification_report(y_test,test_predict,target_names=labels))
print(pd.DataFrame(confusion_matrix(y_test,test_predict)))

猜你喜欢

转载自blog.csdn.net/qinlan1994/article/details/82291890