Python 支持向量机在模型拟合中陷入困境

Python 支持向量机在模型拟合中陷入困境,python,machine-learning,svm,prediction,supervised-learning,Python,Machine Learning,Svm,Prediction,Supervised Learning,我正在使用SVM,我遇到了一个问题,程序的执行停留在model.fit(X\u test,y\u test)中,这与SVM模型的拟合相对应。如何解决这个问题?这是我的密码: # Make Predictions with Naive Bayes On The Iris Dataset import collections from csv import reader from math import sqrt, exp, pi from IPython.display import Image

我正在使用SVM,我遇到了一个问题,程序的执行停留在
model.fit(X\u test,y\u test)
中,这与SVM模型的拟合相对应。如何解决这个问题?这是我的密码:

# Make Predictions with Naive Bayes On The Iris Dataset
import collections
from csv import reader
from math import sqrt, exp, pi

from IPython.display import Image
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns; sns.set()

from sklearn.cross_validation import train_test_split 
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.externals.six import StringIO
from sklearn.feature_selection import SelectKBest, chi2
from sklearn import datasets, metrics
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn.naive_bayes import GaussianNB
from sklearn import svm
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier, export_graphviz

# Function to split the dataset 
def splitdataset(balance_data, column_count): 

    # Separating the target variable 
    X = balance_data.values[:, 1:column_count] 
    Y = balance_data.values[:, 0] 

    # Splitting the dataset into train and test 
    X_train, X_test, y_train, y_test = train_test_split( 
    X, Y, test_size = 0.3, random_state = 100) 

    return X, Y, X_train, X_test, y_train, y_test 

def importdata(): 
    balance_data = pd.read_csv( 'dataExtended.txt', sep= ',') 
    row_count, column_count = balance_data.shape

    # Printing the dataswet shape 
    print ("Dataset Length: ", len(balance_data)) 
    print ("Dataset Shape: ", balance_data.shape) 
    print("Number of columns ", column_count)

    # Printing the dataset obseravtions 
    print ("Dataset: ",balance_data.head()) 
    balance_data['gold'] = balance_data['gold'].astype('category').cat.codes
    balance_data['Program'] = balance_data['Program'].astype('category').cat.codes

    return balance_data, column_count 


# Driver code 
def main(): 
    print("hey")

    # Building Phase 
    data,column_count = importdata() 
    X, Y, X_train, X_test, y_train, y_test = splitdataset(data, column_count) 

    #Create a svm Classifier
    model = svm.SVC(kernel='linear',probability=True) # Linear Kernel

    print('before fitting')

    model.fit(X_test, y_test)
    print('fitting over')
    predicted = model.predict(X_test)   
    print('prediction over')
    print(metrics.classification_report(y_test, predicted))
    print('classification over')
    print(metrics.confusion_matrix(y_test, predicted))
    probs = model.predict_proba(X_test)
    probs_list = list(probs)
    y_pred=[None]*len(y_test)
    y_pred_list = list(y_pred)
    y_test_list = list(y_test)
    i=0
    threshold=0.7
    while i<len(probs_list):
            #print('probs ',probs_list[i][0])
            if (probs_list[i][0]>=threshold) & (probs_list[i][1]<threshold):
                   y_pred_list[i]=0
                   i=i+1

            elif (probs_list[i][0]<threshold) & (probs_list[i][1]>=threshold):
                   y_pred_list[i]=1
                   i=i+1
            else: 
                   #print(y_pred[i])
                   #print('i==> ',i, ' probs length ', len(probs_list), ' ', len(y_pred_list), ' ', len(y_test_list))
                   y_pred_list.pop(i)
                   y_test_list.pop(i)
                   probs_list.pop(i)




    #print(y_pred_list)
    print('confusion matrix\n',confusion_matrix(y_test_list,y_pred_list))
    print('classification report\n', classification_report(y_test_list,y_pred_list))
    print('accuracy score', accuracy_score(y_test_list, y_pred_list))

    print('Mean Absolute Error:', metrics.mean_absolute_error(y_test_list, y_pred_list))
    print('Mean Squared Error:', metrics.mean_squared_error(y_test_list, y_pred_list))
    print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test_list, y_pred_list)))

if __name__=="__main__": 
    main() 
#使用Iris数据集上的朴素贝叶斯进行预测
导入集合
从csv导入读取器
从数学导入sqrt、exp、pi
从IPython.display导入图像
将matplotlib.pyplot作为plt导入
将numpy作为np导入
作为pd进口熊猫
作为sns导入seaborn;sns.set()
从sklearn.cross\u验证导入序列测试\u分割
从sklearn.employ导入树外分类器
从sklearn.externals.six导入StringIO
从sklearn.feature\u选择导入选择K测试,chi2
从sklearn导入数据集、度量
从sklearn.linear_模型导入逻辑回归
从sklearn.metrics导入准确性评分、分类报告、混淆矩阵
从sklearn.naive_bayes导入GaussianNB
从sk学习输入svm
从sklearn导入树
从sklearn.tree导入决策树分类程序,导出图形
#函数来分割数据集
def splitdataset(余额数据、列计数):
#分离目标变量
X=余额\数据。值[:,1:列\计数]
Y=余额\数据。值[:,0]
#将数据集拆分为训练和测试
X_列,X_测试,y_列,y_测试=列车测试分割(
十、 Y,测试尺寸=0.3,随机状态=100)
返回X,Y,X_列,X_测试,Y_列,Y_测试
def importdata():
balance_data=pd.read_csv('dataExtended.txt',sep=',')
行计数,列计数=余额数据.shape
#打印湿形数据
打印(“数据集长度:”,len(平衡数据))
打印(“数据集形状:”,balance_data.Shape)
打印(“列数”,列计数)
#打印数据集观察值
打印(“数据集:”,balance_data.head())
余额单位数据['gold']=余额单位数据['gold'].aType('category')。类别代码
余额数据['Program']=余额数据['Program'].aType('category')。类别代码
返回余额数据,列计数
#驱动程序代码
def main():
打印(“嘿”)
#建筑阶段
数据,列计数=导入数据()
十、 Y,X_列,X_测试,Y_列,Y_测试=拆分数据集(数据,列计数)
#创建一个支持向量机分类器
model=svm.SVC(kernel='linear',probability=True)#线性核
打印('安装前')
模型拟合(X_检验,y_检验)
打印('fitting over')
预测=模型预测(X_检验)
打印('预测结束')
打印(度量。分类报告(y检验,预测))
打印('分类结束')
打印(度量。混淆矩阵(y检验,预测))
probs=模型预测概率(X检验)
问题列表=列表(问题)
y_pred=[None]*len(y_检验)
y_pred_list=列表(y_pred)
y_测试列表=列表(y_测试)
i=0
阈值=0.7

当i=threshold)和(probs_list[i][1]时,这很可能是由于在初始化模型时参数
概率设置为
True
所致。如您在:

概率:bool,默认值=False

是否启用概率 估计。在调用fit之前必须启用此选项,否则会减慢速度 该方法内部使用5倍交叉验证 predict\u proba可能与predict不一致


此问题已在StackOverflow和上讨论过。

这很可能是由于初始化模型时将参数
概率设置为
True
造成的。如图所示:

概率:bool,默认值=False

是否启用概率 估计。在调用fit之前必须启用此选项,否则会减慢速度 该方法内部使用5倍交叉验证 predict\u proba可能与predict不一致


这个问题已经在StackOverflow和上讨论过了。

我想在不减慢程序执行的情况下计算概率,我该怎么做?请看这里:和这里:我想在不减慢程序执行的情况下计算概率,我该怎么做?请看这里:和这里:你已经有好几个doub了在你的MWE中,le导入等。你应该尝试给你的导入提供一些结构以避免歧义等。你在MWE中有几个双重导入等。你应该尝试给你的导入提供一些结构以避免歧义等。