我无法准确理解 SVM 在使用 RBF 时的工作原理。我的数学知识还可以,但到目前为止我遇到的每一个解释对我来说都太简洁了。我目前的理解如下。假设我使用 SVM 作为不可线性分离的数据集的二元分类器(所以 rbf 是正确的选择?)。当 SVM 被训练时,它会绘制一个超平面(我认为它就像 3d 中的平面,但具有更多维度?),以最好地分离数据。
调整时,改变 gamma 的值会改变超平面的表面(也称为决策边界?)。
这就是我开始感到困惑的地方。
因此,伽马值的增加会导致高斯分布更窄。这是否就像说可以绘制的平面上的凹凸(如果以 3d 形式绘制)可以更窄以更好地拟合训练数据?或者在 2D 中,这就像伽玛定义了分隔数据的线的弯曲程度一样?
我也很困惑这如何从有限数量的特征中产生无限维度的表示?任何好的类比都会对我有很大帮助。
使用 RFE,您可以获得特征的重要性等级,但现在我只能使用包内的模型和参数,例如:lmFuncs(linear model),rfFuncs(random forest)
似乎
caretFuncs
Run Code Online (Sandbox Code Playgroud)
可以对自己的模型和参数做一些自定义设置,但是我不知道细节,正式文档没有给出细节,我想在这个RFE过程中应用svm和gbm,因为这是我当前使用的模型训练,有人知道吗?
我让 sklearn svm 分类器工作。我只是使用特征向量对 2 个选项 0 或 1 进行分类。它工作正常。
我想使用图表在页面上对其进行可视化。
问题是我的向量是 512 项长度,所以很难在 x,y 图上显示。
有没有办法可视化像 512 这样的长特征向量的分类超平面?
下面是我的代码:
tuned_parameters = [
{'kernel': ['linear], 'C':[1, 10], 'class_weight': ['auto']}, {'kernel': ['rbf'], 'C':[1,10], 'class_weight':['auto']}]
clf = GridSearchCV(svm.SVC(), tuned_parameters, cv=5, scoring='accuracy')
clf.fit(x_train,y_train)
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Traceback (most recent call last):
File "/home/arajabi/PycharmProjects/Muffin/classification.py", line 77, in <module>
clf3.fit(x_train, y_train)
File "/home/arajabi/anaconda3/lib/python3.5/site-packages/sklearn/model_selection/_search.py", line 639, in fit
cv.split(X, y, groups)))
File "/home/arajabi/anaconda3/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 779, in __call__
while self.dispatch_one_batch(iterator):
File "/home/arajabi/anaconda3/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 625, in dispatch_one_batch
self._dispatch(tasks)
File "/home/arajabi/anaconda3/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 588, in _dispatch
job = self._backend.apply_async(batch, callback=cb)
File "/home/arajabi/anaconda3/lib/python3.5/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 111, in apply_async
result = ImmediateResult(func)
File "/home/arajabi/anaconda3/lib/python3.5/site-packages/sklearn/externals/joblib/_parallel_backends.py", …Run Code Online (Sandbox Code Playgroud) 我使用 Inception 为大约 11000 个视频生成了 1000 个特征(对象的概率)。这些视频已按流派分类,我希望 SVM 预测视频属于哪种流派。
我想将 SVM 应用于这些特征向量,但到目前为止我读过的每个教程都使用train_test_split了sklearn.model_selection.
我的数据看起来如何:
我将数据集分成两个 csv 文件,其中包含约 9000 个训练记录和约 2000 个测试记录(每个记录有 1000 个特征)。它的格式为videoId,feature1,feature2,...,feature1000
我有以流派为标题的文件,例如Training/education.txt用于培训和Testing/education.txt测试。每个文件都包含videoId属于该类型的 s。
我对数据科学和 pandas、sklearn 等库很陌生,所以我不知道应该如何准备这些数据。我一直在遵循本指南:
import pandas as pd
bankdata = pd.read_csv("D:/Datasets/bill_authentication.csv")
X = bankdata.drop('Class', axis=1)
y = bankdata['Class']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20)
Run Code Online (Sandbox Code Playgroud)
我将如何利用我所拥有的东西来获得X_train, X_test, y_train, ?由于目前我的数据设置方式,y_test我无法使用类似的方法。train_test_split
我正在开发一个文本分类项目,并尝试使用 SVC(kernel= '线性') 来获取特征重要性。这是我的代码:(我更改了这篇文章
中的代码)
X = df1[features]
y = df1['label']
# Create selector class for text and numbers
class TextSelector(BaseEstimator, TransformerMixin):
"""Transformer to select a single column from the data frame to perform additional transformations on"""
def __init__(self, key):
self.key = key
def fit(self, X, y=None):
return self
def transform(self, X):
return X[self.key]
class NumberSelector(BaseEstimator, TransformerMixin):
"""For data grouped by feature, select subset of data at a provided key."""
def __init__(self, key):
self.key = key
def fit(self, X, …Run Code Online (Sandbox Code Playgroud) 我正在为不太大的数据集(1000 条记录)构建算法
但它有大约 2000 个列
我收到这个错误
File "C:\Users\User\anaconda3\lib\site-packages\sklearn\svm\_base.py", line 603, in _check_proba
raise AttributeError("predict_proba is not available when "
AttributeError: predict_proba is not available when probability=False
Run Code Online (Sandbox Code Playgroud)
这是我的代码
multilabel_binarizer = MultiLabelBinarizer()
multilabel_binarizer.fit(df['Result'])
y = multilabel_binarizer.transform(df['Result'])
X = df[df.columns.difference(["Result"])]
xtrain, xval, ytrain, yval = train_test_split(X, y, test_size=0.2, random_state=9)
lr = SVC(gamma='auto')
clf = OneVsRestClassifier(lr)
clf.fit(xtrain, ytrain)
y_pred = clf.predict(xval)
Run Code Online (Sandbox Code Playgroud)
如何避免此类错误
当我为 LogisticRegression 运行相同的代码时,它工作正常
我将训练数据放在CSV文件中,其第一个元素是结果,其余元素构成特征向量.
我正在使用Weka来训练和测试这种训练数据的各种算法.但是现在我想多次使用经过训练的模型来测试一个特征向量,这个特征向量不是训练数据的一部分,我对如何去做也不知道.我想我可以通过使用scikit-learn来做到这一点.请提供一些帮助.
我知道什么是SRM,但我不理解SRM和SVM之间的关系.谁能解释一下这个?为什么他们说SVM依赖于SRM方法?非常感谢!
我使用libsvm java包进行句子分类任务.我有3节课.每个句子都表示为大小为435的向量.vector_file的格式如下:
1 0 0.12 0 0.5 0.24 0.32 0 0 0 ... 0.43 0 第一个数字表示类标签,剩余部分是矢量.
以下是我如何制作svm_problem:
public void makeSvmProb(ArrayList<Float> inputVector,float label,int p){
// p is 0 to 77 (total training sentences)
int idx=0,count=0;
svm_prob.y[p]=label;
for(int i=0;i<inputVector.size();i++){
if(inputVector.get(i)!=0) {
count++; // To get the count of non-zero values
}
}
svm_node[] x = new svm_node[count];
for(int i=0;i<inputVector.size();i++){
if(inputVector.get(i)!=0){
x[idx] = new svm_node();
x[idx].index = i;
x[idx].value = inputVector.get(i);
idx++;
}
}
svm_prob.x[p]=x;
}
Run Code Online (Sandbox Code Playgroud)
参数设置:
param.svm_type …Run Code Online (Sandbox Code Playgroud)