小编Viv*_*mar的帖子

根据Pandas中的列名删除多个列

我有一些数据,当我导入它时,我得到以下不需要的列我正在寻找一种简单的方法来删除所有这些

   'Unnamed: 24', 'Unnamed: 25', 'Unnamed: 26', 'Unnamed: 27',
   'Unnamed: 28', 'Unnamed: 29', 'Unnamed: 30', 'Unnamed: 31',
   'Unnamed: 32', 'Unnamed: 33', 'Unnamed: 34', 'Unnamed: 35',
   'Unnamed: 36', 'Unnamed: 37', 'Unnamed: 38', 'Unnamed: 39',
   'Unnamed: 40', 'Unnamed: 41', 'Unnamed: 42', 'Unnamed: 43',
   'Unnamed: 44', 'Unnamed: 45', 'Unnamed: 46', 'Unnamed: 47',
   'Unnamed: 48', 'Unnamed: 49', 'Unnamed: 50', 'Unnamed: 51',
   'Unnamed: 52', 'Unnamed: 53', 'Unnamed: 54', 'Unnamed: 55',
   'Unnamed: 56', 'Unnamed: 57', 'Unnamed: 58', 'Unnamed: 59',
   'Unnamed: 60'
Run Code Online (Sandbox Code Playgroud)

它们被0索引编入索引,所以我尝试了类似的东西

    df.drop(df.columns[[22, 23, 24, 25, …
Run Code Online (Sandbox Code Playgroud)

python pandas

68
推荐指数
8
解决办法
14万
查看次数

sklearn估算器管道的参数无效

我正在使用Python 2.7和sklearn 0.16 从O'Reilly的书" 使用Python 进行机器学习简介 "中实现一个示例.

我正在使用的代码:

pipe = make_pipeline(TfidfVectorizer(), LogisticRegression())
param_grid = {"logisticregression_C": [0.001, 0.01, 0.1, 1, 10, 100], "tfidfvectorizer_ngram_range": [(1,1), (1,2), (1,3)]}
grid = GridSearchCV(pipe, param_grid, cv=5)
grid.fit(X_train, y_train)
print("Best cross-validation score: {:.2f}".format(grid.best_score_))
Run Code Online (Sandbox Code Playgroud)

返回的错误归结为:

ValueError: Invalid parameter logisticregression_C for estimator Pipeline
Run Code Online (Sandbox Code Playgroud)

这是与从v.0.16使用Make_pipeline相关的错误吗?导致此错误的原因是什么?

python pipeline scikit-learn grid-search

24
推荐指数
3
解决办法
1万
查看次数

使用sklearn的GridSearchCV和管道,只需预处理一次

我正在使用scickit-learn来调整模型超参数.我正在使用管道将预处理链接到估算器.我的问题的简单版本看起来像这样:

import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression


grid = GridSearchCV(make_pipeline(StandardScaler(), LogisticRegression()),
                    param_grid={'logisticregression__C': [0.1, 10.]},
                    cv=2,
                    refit=False)

_ = grid.fit(X=np.random.rand(10, 3),
             y=np.random.randint(2, size=(10,)))
Run Code Online (Sandbox Code Playgroud)

在我的情况下,预处理(在玩具示例中将是StandardScale())是耗时的,并且我没有调整它的任何参数.

因此,当我执行该示例时,StandardScaler执行12次.2拟合/预测*2 cv*3参数.但是每次为参数C的不同值执行StandardScaler时,它都返回相同的输出,因此计算它一次就更有效率,然后只运行管道的估算器部分.

我可以在预处理(没有调整超参数)和估算器之间手动拆分管道.但是要将预处理应用于数据,我应该只提供训练集.所以,我必须手动实现拆分,而根本不使用GridSearchCV.

是否有一种简单/标准的方法可以避免在使用GridSearchCV时重复预处理?

python numpy machine-learning scikit-learn grid-search

21
推荐指数
3
解决办法
1万
查看次数

有什么用SVC和SVC与decision_function_shape OneVsRestClassifier之间的差额="OVR"?

我认为它应该是相同的,但对于方法decision_function()我得到不同的结果.只有SVC decision_function_shape='ovr'真的更快.

相关:Scikit学习支持向量机的多类分类

python svm scikit-learn

17
推荐指数
1
解决办法
866
查看次数

GridSearchCV是否执行交叉验证?

我目前正在研究一个问题,该问题比较了同一数据集上三种不同的机器学习算法性能.我将数据集划分为70/30个训练/测试集,然后使用GridSearchCV和网格搜索每个算法的最佳参数X_train, y_train.

第一个问题,我想在训练集上进行网格搜索还是假设在整个数据集上?

第二个问题,我知道GridSearchCV在其实现中使用了K-fold,这是否意味着如果我X_train, y_train在GridSearchCV中比较的所有三种算法都使用了相同的交叉验证?

任何答案都将不胜感激,谢谢.

python machine-learning scikit-learn cross-validation grid-search

16
推荐指数
2
解决办法
3783
查看次数

从sklearn中的Pipeline对象返回系数

我适合一个Pipeline物体RandomizedSearchCV

pipe_sgd = Pipeline([('scl', StandardScaler()),
                    ('clf', SGDClassifier(n_jobs=-1))])

param_dist_sgd = {'clf__loss': ['log'],
                 'clf__penalty': [None, 'l1', 'l2', 'elasticnet'],
                 'clf__alpha': np.linspace(0.15, 0.35),
                 'clf__n_iter': [3, 5, 7]}

sgd_randomized_pipe = RandomizedSearchCV(estimator = pipe_sgd, 
                                         param_distributions=param_dist_sgd, 
                                         cv=3, n_iter=30, n_jobs=-1)

sgd_randomized_pipe.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

我想访问该coef_属性,best_estimator_但我无法做到这一点.我尝试使用coef_下面的代码访问.

sgd_randomized_pipe.best_estimator_.coef_

但是我得到以下AttributeError ...

AttributeError:'Pipeline'对象没有属性'coef_'

scikit-learn文档说这coef_是属性SGDClassifier,属于我的类base_estimator_.

我究竟做错了什么?

python pipeline scikit-learn cross-validation

15
推荐指数
2
解决办法
8421
查看次数

在管道中使用分类器后的度量标准

我继续调查管道.我的目标是仅使用管道执行机器学习的每个步骤.使用其他用例更灵活,更容易调整我的管道.所以我做了什么:

  • 第1步:填写NaN值
  • 第2步:将分类值转换为数字
  • 第3步:分类器
  • 第4步:GridSearch
  • 第5步:添加指标(失败)

这是我的代码:

import pandas as pd
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.feature_selection import SelectKBest
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
from sklearn.metrics import f1_score


class FillNa(BaseEstimator, TransformerMixin):

    def transform(self, x, y=None):
            non_numerics_columns = x.columns.difference(
                x._get_numeric_data().columns)
            for column in x.columns:
                if column in non_numerics_columns:
                    x.loc[:, column] = x.loc[:, …
Run Code Online (Sandbox Code Playgroud)

python pipeline machine-learning scikit-learn grid-search

11
推荐指数
1
解决办法
742
查看次数

使用sklearn cross_val_score和kfolds来拟合并帮助预测模型

我试图理解使用sklearn python模块中的kfolds交叉验证.

我理解基本流程:

  • 实例化一个模型,例如 model = LogisticRegression()
  • 拟合模型,例如 model.fit(xtrain, ytrain)
  • 预测例如 model.predict(ytest)
  • 使用例如交叉val分数来测试拟合的模型精度.

我很困惑的地方是使用具有交叉val分数的sklearn kfolds.据我了解,cross_val_score函数将适合模型并在kfolds上进行预测,为每个折叠提供准确度分数.

例如使用这样的代码:

kf = KFold(n=data.shape[0], n_folds=5, shuffle=True, random_state=8)
lr = linear_model.LogisticRegression()
accuracies = cross_val_score(lr, X_train,y_train, scoring='accuracy', cv = kf)
Run Code Online (Sandbox Code Playgroud)

因此,如果我有一个包含训练和测试数据的数据集,并且我使用cross_val_scorekfolds函数来确定算法对每个折叠的训练数据的准确性,那么model现在是否适合并准备好对测试数据进行预测?所以在上面的情况下使用lr.predict

谢谢你的帮助.

python machine-learning scikit-learn cross-validation

9
推荐指数
1
解决办法
5374
查看次数

单例数组数组(<函数列在0x7f3a311320d0>,dtype = object)不能被视为有效集合

不知道如何解决.任何帮助非常感谢.我看到了矢量化:不是一个有效的集合,但不确定我是否理解这一点

    train = df1.iloc[:,[4,6]]
            target =df1.iloc[:,[0]]

            def train(classifier, X, y):
                X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)

                classifier.fit(X_train, y_train)
                print ("Accuracy: %s" % classifier.score(X_test, y_test))
                return classifier

        trial1 = Pipeline([
            ('vectorizer', TfidfVectorizer()),
            ('classifier', MultinomialNB()),
        ])

        train(trial1, train, target)
Run Code Online (Sandbox Code Playgroud)

错误如下:

    ----> 6 train(trial1, train, target)

    <ipython-input-140-ac0e8d32795e> in train(classifier, X, y)
          1 def train(classifier, X, y):
    ----> 2     X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)
          3 
          4     classifier.fit(X_train, y_train)
          5     print ("Accuracy: %s" % classifier.score(X_test, y_test)) …
Run Code Online (Sandbox Code Playgroud)

python pipeline pandas scikit-learn train-test-split

9
推荐指数
3
解决办法
2万
查看次数

在Scikit学习中将Smote与Gridsearchcv一起使用

我正在处理不平衡的数据集,并希望使用scikit的gridsearchcv进行网格搜索以调整模型的参数。为了对数据进行过采样,我想使用SMOTE,我知道我可以将其作为管道的一个阶段,并将其传递给gridsearchcv。我担心的是,我认为训练和验证折纸都将使用击打,这不是您应该做的。验证集不应过采样。我是否正确,整个管道将应用于两个数据集拆分?如果是的话,我该如何扭转呢?提前谢谢

python machine-learning scikit-learn grid-search oversampling

9
推荐指数
1
解决办法
3548
查看次数