Questions tagged «scikit-learn»

用于Python的机器学习库。对于(a)涉及scikit-learn或该问题的关键部分或预期答案的任何主题问题,请使用此标签;&(b)不仅仅是关于如何使用scikit-learn。

3
XGBoost vs Python Sklearn梯度增强树
我试图了解XGBoost的工作原理。我已经了解了梯度增强树如何在Python sklearn上工作。我不清楚XGBoost是否以相同的方式工作,但速度更快,或者它与python实现之间存在根本差异。 当我读这篇论文时 http://learningsys.org/papers/LearningSys_2015_paper_32.pdf 在我看来,XGboost的最终结果与Python实现中的结果相同,但是主要区别在于XGboost如何在每个回归树中找到最佳分割。 基本上,XGBoost提供相同的结果,但是速度更快。 这是正确的,还是我还缺少其他东西?

2
scikit上的多标签分类指标
我正在尝试构建多标签分类器,以便使用scikit将主题分配给现有文档 我正在处理我的文档,将它们通过传递给TfidfVectorizer标签,MultiLabelBinarizer并OneVsRestClassifier以SGDClassifier作为估算器创建了。 但是,当测试我的分类器时,我只能得到0.29的分数,对于类似的问题,从我的阅读中得出的分数非常低。我在TfidfVectorizer上尝试了多个选项,例如停用词,单字组,词干,似乎没有什么改变结果。 我还习惯于GridSearchCV为估算器获取最佳参数,目前我对下一步的想法一无所知。 同时,根据我的理解,我无法使用它scikit.metrics,OneVsRestClassifier那么我如何获得一些指标(F1,Precision,Recall等)以找出问题所在? 我的数据语料库可能有问题吗? 更新:我也尝试使用CountVectorizer和HashingVectorizer管道化它们,TfidfTransformer但结果相似。所以我猜想词袋方法在标记化领域中表现最好,其余的取决于分类器...

2
随机森林过度拟合吗?
我正在使用scikit-learn在随机森林中进行实验,并且获得了很好的训练结果,但是相对而言,我的测试结果却很差... 这是我要解决的问题(灵感来自扑克):给定玩家A的底牌,玩家B的底牌和翻牌(3张牌),哪位玩家的手牌最好?从数学上讲,这是14个输入(7张卡-一张等级,每张一套)和一个输出(0或1)。 到目前为止,这是我的一些结果: Training set size: 600k, test set size: 120k, number of trees: 25 Success rate in training set: 99.975% Success rate in testing set: 90.05% Training set size: 400k, test set size: 80k, number of trees: 100 Success rate in training set: 100% Success rate in testing set: …

3
如何计算逻辑回归系数的标准误差
我正在使用Python的scikit-learn来训练和测试逻辑回归。 scikit-learn返回自变量的回归系数,但不提供系数的标准误差。我需要这些标准误差来为每个系数计算Wald统计量,然后依次将这些系数进行比较。 我发现了一种关于如何计算逻辑回归系数的标准误差的描述(此处),但是很难理解。 如果您碰巧知道有关如何计算这些标准误差的简单明了的解释,并且/或者可以为我提供一个简单的解释,我将不胜感激!我并不是指特定的代码(尽管请随意发布任何可能有用的代码),而是对所涉及步骤的算法解释。

3
如何在Python中系统地删除共线变量?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为交叉验证的主题。 2年前关闭。 到目前为止,我已经通过查看相关表并消除了超过某个阈值的变量,来删除了共线变量作为数据准备过程的一部分。有一种更可接受的方式吗?此外,我知道一次只查看两个变量之间的相关性并不理想,像VIF这样的测量考虑了多个变量之间的潜在相关性。如何系统地选择不表现出多重共线性的变量组合? 我将数据存储在熊猫数据框中,并且正在使用sklearn的模型。

3
为什么不使用“正规方程”来找到简单的最小二乘系数呢?
我在这里看到了这个列表,简直不敢相信有这么多方法可以求解最小二乘。对“正规方程” 维基百科似乎是一个相当简单的方法 α^β^=y¯−β^x¯,=∑ni=1(xi−x¯)(yi−y¯)∑ni=1(xi−x¯)2α^=y¯−β^x¯,β^=∑i=1ñ(X一世-X¯)(ÿ一世-ÿ¯)∑一世=1个ñ(X一世-X¯)2 {\displaystyle {\begin{aligned}{\hat {\alpha }}&={\bar {y}}-{\hat {\beta }}\,{\bar {x}},\\{\hat {\beta }}&={\frac {\sum _{i=1}^{n}(x_{i}-{\bar {x}})(y_{i}-{\bar {y}})}{\sum _{i=1}^{n}(x_{i}-{\bar {x}})^{2}}}\end{aligned}}} 那么为什么不仅仅使用它们呢?考虑到Mark L.上面的第一个链接,我认为一定存在计算或精度问题。Stone提到SVD或QR是统计软件中流行的方法,并且正常方程式“从可靠性和数值精度的角度来看很麻烦”。但是,在下面的代码中,与三个流行的python函数相比,正则方程使我的精度达到了〜12个小数位:numpy的polyfit;西皮的罪过 ; 和scikit-learn的LinearRegression。 更有意思的是,当n = 100000000时,法线方程法最快。polyfit为12.9s;用于线性回归的4.2s;对于标准方程式为1.8秒。 码: import numpy as np from sklearn.linear_model import LinearRegression from scipy.stats import linregress import timeit b0 = 0 b1 = 1 n = 100000000 …

3
如何在嵌套交叉验证中获取超级参数?
我已经阅读了以下有关嵌套交叉验证的文章,但仍然不确定100%如何使用嵌套交叉验证进行模型选择: 嵌套交叉验证,用于模型选择 模型选择和交叉验证:正确的方法 为了解释我的困惑,让我尝试逐步使用嵌套交叉验证方法进行模型选择。 使用K折创建外部CV循环。这将用于估计“赢得”每个内部CV循环的超参数的性能。 使用GridSearchCV创建一个内部CV循环,在每个内部循环中,GSCV都会遍历参数空间的所有可能组合,并提供最佳的参数集。 GSCV在内部循环中找到最佳参数后,将使用外部循环中的测试集对其进行测试,以获得性能评估。 然后,外循环更新为测试集的下一个折叠,其余的更新为训练集,并重复1-3次。总共可能的“获胜”参数是在外循环中指定的折数。因此,如果外部循环是5倍,那么您将对具有5组不同的超参数的算法进行性能评估,而不是一组特定的超参数的性能。 SKLearn的示例页面上说明了这种方法:http ://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html 问题:4 . 之后,您如何确定哪些超级参数效果最佳?我知道您想使用最后的COMPLETE数据来训练算法(例如逻辑回归,随机森林等)。但是,如何确定哪些超级参数在嵌套交叉验证中效果最好?我的理解是,对于每个内部循环,一组不同的超参数将获胜。对于外循环,您正在评估GridSearchCV的性能,但没有任何一组特定的超参数。因此,在最终的模型创建中,您如何知道要使用哪些超参数?那是我从其他方面难以理解的缺失逻辑。 预先感谢您提供任何提示,尤其是如果@Dikran Marsupial和@cbeleites可以发出提示音! 编辑:如果可以的话,请在回答中使用“算法”和“超级参数”之类的术语。我认为让我感到困惑的一个原因是人们使用术语“模型”或“模型选择”。无论他们是在谈论选择使用哪种算法还是使用哪些超级参数,我都感到困惑。 编辑2:我创建了一个笔记本,其中显示了两种进行嵌套交叉验证的方法。第一种方法是SKLearn示例中显示的方法,另一种较长的方法是我编写的方法。SKLearn中显示的方法没有公开“获胜”的超参数,但我的较长方法却没有。但是问题仍然是一样的。完成嵌套交叉验证后,即使暴露了超参数,我现在该怎么办?从笔记本末尾的超参数可以看出,它们之间的差异很大。


6
最快的SVM实施
更多的是一个一般性的问题。我正在运行rbf SVM进行预测建模。我认为我当前的程序肯定需要加快速度。我使用scikit learning进行粗略到精细的网格搜索+交叉验证。 每次SVM运行大约需要一分钟,但是在所有迭代中,我仍然发现它太慢了。假设我最终在多个内核上对交叉验证部分进行了多线程处理,那么关于提高程序速度的建议是什么?是否有更快的SVM实现?我听说过一些GPU SVM,但并没有对其进行深入研究。任何用户,速度更快吗?

3
statsmodel OLS和scikit线性回归之间的差异
我有一个关于来自不同库的两种不同方法的问题,这些方法似乎做同样的工作。我正在尝试建立线性回归模型。 这是我将statsmodel库与OLS一起使用的代码: X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1) x_train = sm.add_constant(X_train) model = sm.OLS(y_train, x_train) results = model.fit() print "GFT + Wiki / GT R-squared", results.rsquared 打印输出GFT + Wiki / GT R平方0.981434611923 第二个是scikit学习库线性模型方法: model = LinearRegression() model.fit(X_train, y_train) predictions = model.predict(X_test) print 'GFT + Wiki / GT …

7
随机森林过度拟合
我正在尝试在scikits-learn中使用随机森林回归。问题是我遇到了很高的测试错误: train MSE, 4.64, test MSE: 252.25. 这是我的数据的样子:(蓝色:真实数据,绿色:预测的): 我将90%用于培训,将10%用于测试。这是我尝试几种参数组合后使用的代码: rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) test_mse = mean_squared_error(y_test, rf.predict(X_test)) train_mse = mean_squared_error(y_train, rf.predict(X_train)) print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse)) plot(rf.predict(X)) plot(y) 有什么可能的策略来改善我的健康状况?我还有其他方法可以提取基础模型吗?对于我来说,令人难以置信的是,经过多次重复相同的模式后,模型对新数据的表现如此差劲。我完全没有希望尝试拟合此数据吗?

3
逻辑回归:Scikit Learn与glmnet
我正在尝试sklearn使用glmnetR中的包复制逻辑回归库的结果。 sklearn分w ^ ,Ç1个2wŤw + C∑我= 1ñ日志(exp(- ÿ一世(XŤ一世w + c ))+ 1 )分w,C1个2wŤw+C∑一世=1个ñ日志⁡(经验值⁡(-ÿ一世(X一世Ťw+C))+1个)\min_{w,c} \frac12 w^Tw + C\sum_{i=1}^N \log(\exp(-y_i(X_i^Tw+c)) + 1) 从的渐近点来看glmnet,它的实现将成本函数 分β,β0− [ 1ñ∑我= 1ñÿ一世(β0+ xŤ一世β)- 日志(1 + e(β0+ xŤ一世β))] + λ [ (α - 1 )| | β| |22/ 2+α | | β| |1个]分β,β0-[1个ñ∑一世=1个ñÿ一世(β0+X一世Ťβ)-日志⁡(1个+Ë(β0+X一世Ťβ))]+λ[(α-1个)||β||22/2+α||β||1个]\min_{\beta, \beta_0} -\left[\frac1N \sum_{i=1}^N y_i(\beta_0+x_i^T\beta)-\log(1+e^{(\beta_0+x_i^T\beta)})\right] + …

3
解决机器学习中数据丢失问题的方法
几乎我们要使用机器学习算法进行预测的任何数据库都会发现某些特征的缺失值。 有几种解决此问题的方法,以排除具有缺失值的线,直到它们填充特征的平均值为止。 我想使用一种更健壮的方法,该方法基本上将运行回归(或其他方法),其中因变量(Y)将是每个缺少值但仅包含表行的列包含所有数据的对象,并使用此方法预测缺失值,按表填写表格并移至具有缺失值的下一个``列'',然后重复该方法直到所有内容都填满。 但这给了我一些疑问。 为什么任何列开始?我相信缺失值最小的那个直到最大的一个 是否有任何缺失值的阈值不值得尝试完成?(例如,如果此特征仅填充了10%的值,将其排除会更有趣) 在传统软件包或其他方法中是否有任何对丢失有鲁棒性的实现?

2
Scikit使用CalibratedClassifierCV校准分类器的正确方法
Scikit具有CalibratedClassifierCV,它使我们能够在特定的X,y对上校准模型。它还明确指出data for fitting the classifier and for calibrating it must be disjoint. 如果它们必须不相交,则对分类器进行以下训练是否合法? model = CalibratedClassifierCV(my_classifier) model.fit(X_train, y_train) 我担心使用相同的训练集会违反disjoint data规则。另一种可能是设置验证集 my_classifier.fit(X_train, y_train) model = CalibratedClassifierCV(my_classifier, cv='prefit') model.fit(X_valid, y_valid) 这样做的缺点是要保留较少的数据用于训练。另外,如果CalibratedClassifierCV只适合于适合其他训练集的模型,为什么默认选项为cv=3,也适合基本估计量?交叉验证是否可以自行处理不相交规则? 问题:使用CalibratedClassifierCV的正确方法是什么?

2
基于“ F回归”和基于
比较特征是否与将特征分别F-regression与标签关联并观察值相同?[R2R2R^2 我经常看到我的同事F regression在他们的机器学习管道中使用进行特征选择sklearn: sklearn.feature_selection.SelectKBest(score_func=sklearn.feature_selection.f_regression...)` 有些人请告诉我-为什么它给出与将其与label / depedendent变量相关联时相同的结果? 对我来说,尚不清楚F_regression在特征选择中使用优势。 这是我的代码:我正在使用mtcars来自的数据集R: import pandas as pd import numpy as np from sklearn import feature_selection from sklearn.linear_model import LinearRegression #....load mtcars dataset into a pandas dataframe called "df", not shown here for conciseness # only using these numerical columns as features ['mpg', 'disp', 'drat', …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.