python sklearn svm_python – sklearn SVM表现非常糟糕

我有9164分,其中4303被标记为我想要预测的类,4861被标记为不是该类.它们没有重复点.

df = pd.DataFrame(dataset)

train, validate, test = np.split(df.sample(frac=1), [int(.6*len(df)), int(.8*len(df))])

train_labels = construct_labels(train)

train_data = construct_data(train)

test_labels = construct_labels(test)

test_data = construct_data(test)

def predict_labels(test_data, classifier):

labels = []

for test_d in test_data:

labels.append(classifier.predict([test_d]))

return np.array(labels)

def construct_labels(df):

labels = []

for index, row in df.iterrows():

if row[2] == 'Trump':

labels.append('Atomium')

else:

labels.append('Not Trump')

return np.array(labels)

def construct_data(df):

first_row = df.iloc[0]

data = np.array([first_row[1]])

for index, row in df.iterrows():

if first_row[0] != row[0]:

data = np.concatenate((data, np.array([row[1]])), axis=0)

return data

然后:

>>> classifier = SVC(verbose=True)

>>> classifier.fit(train_data, train_labels)

[LibSVM].......*..*

optimization finished, #iter = 9565

obj = -2718.376533, rho = 0.132062

nSV = 5497, nBSV = 2550

Total nSV = 5497

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,

decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',

max_iter=-1, probability=False, random_state=None, shrinking=True,

tol=0.001, verbose=True)

>>> predicted_labels = predict_labels(test_data, classifier)

>>> for p, t in zip(predicted_labels, test_labels):

... if p == t:

... correct = correct + 1

并且我在1833年只得到正确的943个标签(= len(test_labels)) – > (943 * 100/1843 = 51.4%)

我怀疑我在这里错过了一些重要的时间,也许我应该将parameter设置为分类器以进行更精致的工作或其他什么?

注意:第一次在这里使用SVM,所以你可能认为理所当然,我甚至可能没想到……

尝试:

我去了,并将负面例子的数量减少到4303(与正例相同).这略微提高了准确性.

在答案后编辑:

>>> print(clf.best_estimator_)

SVC(C=1000.0, cache_size=200, class_weight='balanced', coef0=0.0,

decision_function_shape=None, degree=3, gamma=0.0001, kernel='rbf',

max_iter=-1, probability=False, random_state=None, shrinking=True,

tol=0.001, verbose=False)

>>> classifier = SVC(C=1000.0, cache_size=200, class_weight='balanced', coef0=0.0,

... decision_function_shape=None, degree=3, gamma=0.0001, kernel='rbf',

... max_iter=-1, probability=False, random_state=None, shrinking=True,

... tol=0.001, verbose=False)

>>> classifier.fit(train_data, train_labels)

SVC(C=1000.0, cache_size=200, class_weight='balanced', coef0=0.0,

decision_function_shape=None, degree=3, gamma=0.0001, kernel='rbf',

max_iter=-1, probability=False, random_state=None, shrinking=True,

tol=0.001, verbose=False)

我也尝试了clf.fit(train_data,train_labels),它也执行了相同的操作.

用数据编辑(数据不是随机的):

>>> train_data[0]

array([ 20.21062112, 27.924016 , 137.13815308, 130.97432804,

... # there are 256 coordinates in total

67.76352596, 56.67798138, 104.89566517, 10.02616417])

>>> train_labels[0]

'Not Trump'

>>> train_labels[1]

'Trump'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,关于 Python 中的 scikit-learn 库中的支持向量机(Support Vector Machines,简称 SVM),以下是一些简单的信息: scikit-learn 是一个流行的 Python 库,用于机器学习和数据挖掘任务。其中包含了 SVM 等多种分类算法的实现。 SVM 是一种基于最大间隔分类的方法,可以用于二元和多元分类问题。它的核心思想是通过将样本映射到高维空间中,在该空间中找到一个最优的超平面(也称为分离超平面),使得两类样本之间的间隔最大化。这个最优的超平面可以用来进行新样本的分类。 在 scikit-learn 中,可以使用 `svm` 模块中的 `SVC` 类来实现 SVM。例如,以下代码可以用于训练一个基于线性核函数的 SVM 分类器: ```python from sklearn import svm # 创建一个 SVM 分类器 clf = svm.SVC(kernel='linear') # 训练分类器 clf.fit(X_train, y_train) # 使用分类器对测试数据进行预测 y_pred = clf.predict(X_test) ``` 其中,`X_train` 和 `y_train` 是训练数据集的特征和标签,`X_test` 是测试数据集的特征,`y_pred` 是 SVM 分类器对测试数据的预测结果。 除了线性核函数外,scikit-learn 中还支持使用多项式核函数、径向基函数(Radial Basis Function,RBF)等不同的核函数来构建 SVM 分类器。您可以在 `SVC` 类的 `kernel` 参数中指定所需的核函数。 ### 回答2: Python中的sklearn SVM(Support Vector Machine)是一种非常常用的机器学习算法,主要用于对样本进行分类和回归分析。该算法基于统计学习理论中的最大边界分类器理论,利用核函数将样本从原始空间投影到高维特征空间,然后在高维特征空间中寻找最大间隔超平面,用于分类分割。该算法有很好的分类精度和泛化能力,无需先验知识,同时支持多类和二类分类问题。 通过Python中的sklearn SVM,我们可以很方便地实现SVM算法。首先需要选定SVM算法的核函数,有线性核函数、多项式核函数和高斯核函数等几种。对于二类分类问题,我们可以调用sklearn.svm.SVC类来实现,对于多类分类问题,可以使用sklearn.svm.SVC的一对多(one-vs.-rest)方法进行分类。同时,该算法还支持进行回归预测,可以通过调用sklearn.svm.SVR类来实现。 在使用sklearn SVM时,需要注意模型参数的设置,主要包括核函数、正则化常数、损失函数等参数。另外,还需要进行数据预处理,包括特征缩放、数据标准化等操作,提高模型的精度和鲁棒性。对于大规模数据集,可以考虑使用线性SVM和随机梯度下降(SGD)优化算法加速计算。 总之,Python中的sklearn SVM是一种非常实用的机器学习算法,可以在分类、回归等方面得到广泛应用。在使用时需要注意算法的参数设置和数据预处理,以获得更好的分类预测效果。 ### 回答3: Python中的scikit-learn是一个流行的机器学习库,提供了许多用于分类、聚类和回归的算法。其中支持向量机(SVM)作为一种强大的分类器,是众多机器学习算法之一。 支持向量机是一种二元分类器,通过将训练数据映射到高维空间中,使得分类边界最优化。在SVM中,定义一个边界,将不同类别的数据点分隔开。这个边界被选择为使得相对距离最大的那个边界,这个距离可以是欧几里得距离,也可以是其他更特定的距离函数。 sklearn中的SVM分类器提供了许多选项,可以自定义分类边界和优化函数。其中,有两个重要的参数需要选择:C和kernel。C是正则化参数,可以控制模型的复杂度,越大,分类器将越不容易过拟合;kernel决定了如何将数据映射到高维空间中,不同的kernel会对边界的形状产生影响。 sklearn库中提供了一个SVC类,可以初始化一个类似于其他分类器的对象。在训练数据上调用fit()方法,然后使用predict()对新样本进行分类。SVC模型还可以使用cross_val_score()和GridSearchCV()等方法进行交叉验证和参数选择。 总的来说,sklearn的支持向量机分类器是一种强大而灵活的分类器,可以解决许多分类问题。它具有许多可调参数和选项,可以在高维空间中建立复杂的分类边界。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值