这是一个后续问题,如何知道Scikit-learn中的predict_proba在返回数组中表示了哪些类
在那个问题中,我引用了以下代码:
>>> import sklearn
>>> sklearn.__version__
'0.13.1'
>>> from sklearn import svm
>>> model = svm.SVC(probability=True)
>>> X = [[1,2,3], [2,3,4]] # feature vectors
>>> Y = ['apple', 'orange'] # classes
>>> model.fit(X, Y)
>>> model.predict_proba([1,2,3])
array([[ 0.39097541, 0.60902459]])
Run Code Online (Sandbox Code Playgroud)
我在那个问题中发现这个结果表示属于每个类的点的概率,按照model.classes_给出的顺序
>>> zip(model.classes_, model.predict_proba([1,2,3])[0])
[('apple', 0.39097541289393828), ('orange', 0.60902458710606167)]
Run Code Online (Sandbox Code Playgroud)
所以...这个答案,如果正确解释,说这个点可能是一个"橙色"(由于数据量很小,信心相当低).但直觉上,这个结果显然是不正确的,因为给出的点与'apple'的训练数据相同.只是为了确定,我也测试了反向:
>>> zip(model.classes_, model.predict_proba([2,3,4])[0])
[('apple', 0.60705475211840931), ('orange', 0.39294524788159074)]
Run Code Online (Sandbox Code Playgroud)
再次,显然不正确,但在另一个方向.
最后,我尝试了更远的点.
>>> X = [[1,1,1], [20,20,20]] # feature vectors
>>> model.fit(X, Y)
>>> zip(model.classes_, model.predict_proba([1,1,1])[0])
[('apple', 0.33333332048410247), ('orange', 0.66666667951589786)]
Run Code Online (Sandbox Code Playgroud)
同样,该模型预测错误的概率.但是,model.predict功能正确!
>>> model.predict([1,1,1])[0] …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建我的大型非平衡数据集的N个平衡随机子样本.有没有办法简单地使用scikit-learn/pandas或者我必须自己实现它?任何指向这样做的代码的指针?
这些子样本应该是随机的,并且可以重叠,因为我在非常大的分类器集合中将每个子样本提供给单独的分类器.
在Weka中有一个名为spreadsubsample的工具,sklearn中有相同的东西吗? http://wiki.pentaho.com/display/DATAMINING/SpreadSubsample
(我知道加权但这不是我想要的.)
我想将scikits.learn.hmm.GaussianHMM与不同长度的训练序列相匹配.然而,拟合方法通过这样做来防止使用不同长度的序列
obs = np.asanyarray(obs)
Run Code Online (Sandbox Code Playgroud)
它只适用于同样形状的数组列表.有人提示如何继续吗?
我想知道在scikit-learn中是否存在处理nan/null值的分类器.我以为随机森林回归器处理这个,但是当我打电话时我收到了一个错误predict.
X_train = np.array([[1, np.nan, 3],[np.nan, 5, 6]])
y_train = np.array([1, 2])
clf = RandomForestRegressor(X_train, y_train)
X_test = np.array([7, 8, np.nan])
y_pred = clf.predict(X_test) # Fails!
Run Code Online (Sandbox Code Playgroud)
我是否可以使用缺少值的任何scikit-learn算法调用预测?
编辑. 现在我想到这一点,这是有道理的.这在训练期间不是问题,但是当你预测变量为空时如何分支?也许你可以分开两种方式并平均结果?只要距离函数忽略空值,k-NN似乎应该可以正常工作.
编辑2(更老,更聪明) 一些gbm库(例如xgboost)正是为了这个目的而使用三元树而不是二叉树:2个孩子用于是/否决定,1个孩子用于缺失决策.sklearn正在使用二叉树
我想进行有监督的学习.
到现在为止,我知道要对所有功能进行监督学习.
但是,我还想进行K最佳功能的实验.
我阅读了文档,发现在Scikit中学习了SelectKBest方法.
不幸的是,我不确定在找到这些最佳功能后如何创建新的数据帧:
我们假设我想进行5个最佳功能的实验:
from sklearn.feature_selection import SelectKBest, f_classif
select_k_best_classifier = SelectKBest(score_func=f_classif, k=5).fit_transform(features_dataframe, targeted_class)
Run Code Online (Sandbox Code Playgroud)
现在,如果我要添加下一行:
dataframe = pd.DataFrame(select_k_best_classifier)
Run Code Online (Sandbox Code Playgroud)
我将收到一个没有功能名称的新数据帧(只有索引从0到4开始).
我应该把它替换为:
dataframe = pd.DataFrame(fit_transofrmed_features, columns=features_names)
Run Code Online (Sandbox Code Playgroud)
我的问题是如何创建features_names列表?
我知道我应该使用:select_k_best_classifier.get_support()
返回布尔值数组.
数组中的真值表示右列中的索引.
我应该如何使用这个布尔数组与我可以通过该方法获得的所有功能名称的数组:
feature_names = list(features_dataframe.columns.values)
Run Code Online (Sandbox Code Playgroud) 我想在SVC模型中执行GridSearchCV,但是它使用one-vs-all策略.对于后者,我可以这样做:
model_to_set = OneVsRestClassifier(SVC(kernel="poly"))
Run Code Online (Sandbox Code Playgroud)
我的问题是参数.假设我想尝试以下值:
parameters = {"C":[1,2,4,8], "kernel":["poly","rbf"],"degree":[1,2,3,4]}
Run Code Online (Sandbox Code Playgroud)
为了执行GridSearchCV,我应该做类似的事情:
cv_generator = StratifiedKFold(y, k=10)
model_tunning = GridSearchCV(model_to_set, param_grid=parameters, score_func=f1_score, n_jobs=1, cv=cv_generator)
Run Code Online (Sandbox Code Playgroud)
但是,然后我执行它得到:
Traceback (most recent call last):
File "/.../main.py", line 66, in <module>
argclass_sys.set_model_parameters(model_name="SVC", verbose=3, file_path=PATH_ROOT_MODELS)
File "/.../base.py", line 187, in set_model_parameters
model_tunning.fit(self.feature_encoder.transform(self.train_feats), self.label_encoder.transform(self.train_labels))
File "/usr/local/lib/python2.7/dist-packages/sklearn/grid_search.py", line 354, in fit
return self._fit(X, y)
File "/usr/local/lib/python2.7/dist-packages/sklearn/grid_search.py", line 392, in _fit
for clf_params in grid for train, test in cv)
File "/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.py", line 473, in __call__
self.dispatch(function, args, kwargs)
File "/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.py", line …Run Code Online (Sandbox Code Playgroud) 我正在用sklearn.linear_model.LogisticRegression它scikit learn来运行Logistic回归.
C : float, optional (default=1.0) Inverse of regularization strength;
must be a positive float. Like in support vector machines, smaller
values specify stronger regularization.
Run Code Online (Sandbox Code Playgroud)
请问C简单来说,这意味着什么?什么是正规化力量?
我是scikit-learn的新手,我TfidfVectorizer用来在一组文档中找到术语的tfidf值.我用下面的代码来获得相同的代码.
vectorizer = TfidfVectorizer(stop_words=u'english',ngram_range=(1,5),lowercase=True)
X = vectorizer.fit_transform(lectures)
Run Code Online (Sandbox Code Playgroud)
现在如果我打印X,我能够看到矩阵中的所有条目,但我如何根据tfidf分数找到前n个条目.除此之外,是否有任何方法可以帮助我找到基于每个ngram的tfidf得分的前n个条目,即unigram,bigram,trigram等中的顶级条目?
我正在运行GridSearch CV来优化scikit中分类器的参数.一旦完成,我想知道哪些参数被选为最佳参数.
每当我这样做,我得到一个AttributeError: 'RandomForestClassifier' object has no attribute 'best_estimator_',并且不知道为什么,因为它似乎是文档的合法属性.
from sklearn.grid_search import GridSearchCV
X = data[usable_columns]
y = data[target]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
rfc = RandomForestClassifier(n_jobs=-1,max_features= 'sqrt' ,n_estimators=50, oob_score = True)
param_grid = {
'n_estimators': [200, 700],
'max_features': ['auto', 'sqrt', 'log2']
}
CV_rfc = GridSearchCV(estimator=rfc, param_grid=param_grid, cv= 5)
print '\n',CV_rfc.best_estimator_
Run Code Online (Sandbox Code Playgroud)
产量:
`AttributeError: 'GridSearchCV' object has no attribute 'best_estimator_'
Run Code Online (Sandbox Code Playgroud) 有没有办法在Jupyter笔记本中绘制决策树,以便我可以交互式地探索它的节点?我在考虑这样的事情
.这是KNIME的一个例子.
我找到了https://planspace.org/20151129-see_sklearn_trees_with_d3/和https://bl.ocks.org/ajschumacher/65eda1df2b0dd2cf616f,我知道你可以在Jupyter中运行d3,但是我没有找到任何包,那样做.
python ×10
scikit-learn ×10
pandas ×3
jupyter ×1
nan ×1
numpy ×1
scikits ×1
subsampling ×1
tf-idf ×1
top-n ×1