我有一个分类任务,时间序列作为数据输入,其中每个属性(n = 23)代表一个特定的时间点.除了绝对分类结果我想知道,哪些属性/日期对结果的贡献程度如何.所以我只是使用它feature_importances_,这对我很有用.
但是,我想知道如何计算它们以及使用哪种度量/算法.很遗憾,我找不到有关此主题的任何文档.
我有一个熊猫数据帧,我希望把它分成3组.我知道使用train_test_split从sklearn.cross_validation,一个可以在两个集(训练集和测试)分割数据.但是,我找不到任何关于将数据拆分为三组的解决方案.最好,我想拥有原始数据的索引.
我知道解决方法是使用train_test_split两次并以某种方式调整索引.但有没有更标准/内置的方法将数据分成3组而不是2组?
尝试从sklearn导入时出现以下错误:
>>> from sklearn import svm
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
from sklearn import svm
File "C:\Python27\lib\site-packages\sklearn\__init__.py", line 16, in <module>
from . import check_build
ImportError: cannot import name check_build
Run Code Online (Sandbox Code Playgroud)
我使用的是python 2.7,scipy-0.12.0b1 superpack,numpy-1.6.0 superpack,scikit-learn-0.11我有一个windows 7机器
我已经检查了这个问题的几个答案,但没有一个能解决这个问题.
我在Ubuntu 14.04中使用python 2.7.我用这些命令安装了scikit-learn,numpy和matplotlib:
sudo apt-get install build-essential python-dev python-numpy \
python-numpy-dev python-scipy libatlas-dev g++ python-matplotlib \
ipython
Run Code Online (Sandbox Code Playgroud)
但是当我导入这些包时:
from sklearn.cross_validation import train_test_split
Run Code Online (Sandbox Code Playgroud)
它返回给我这个错误:
ImportError: No module named sklearn.cross_validation
Run Code Online (Sandbox Code Playgroud)
我需要做什么?
我有一个pandas数据框,我希望能够从B列和C列中的值预测A列的值.这是一个玩具示例:
import pandas as pd
df = pd.DataFrame({"A": [10,20,30,40,50],
"B": [20, 30, 10, 40, 50],
"C": [32, 234, 23, 23, 42523]})
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会有类似的东西ols(A ~ B + C, data = df),但当我从算法库中查看示例时,scikit-learn它似乎将数据提供给模型,其中包含行而不是列.这将要求我将数据重新格式化为列表中的列表,这似乎首先打败了使用pandas的目的.在pandas数据框中对数据运行OLS回归(或更普遍的机器学习算法)的最pythonic方法是什么?
我很难理解class_weightscikit-learn的Logistic回归中的参数是如何运作的.
情况
我想使用逻辑回归对非常不平衡的数据集进行二进制分类.类别标记为0(负)和1(正),观察数据的比例约为19:1,大多数样本具有负结果.
第一次尝试:手动准备训练数据
我将我拥有的数据拆分为不相交的集合进行培训和测试(约80/20).然后我手动随机抽取训练数据,得到不同比例的训练数据,比例为19:1; 从2:1 - > 16:1.
然后,我在这些不同的训练数据子集上训练逻辑回归,并绘制召回(= TP /(TP + FN))作为不同训练比例的函数.当然,召回是根据观察到的比例为19:1的不相交TEST样本计算的.请注意,虽然我在不同的训练数据上训练了不同的模型,但我在相同(不相交)的测试数据上计算了所有这些模型的回忆.
结果如预期的那样:召回率为2:1的训练比例约为60%,并且在达到16:1时下降得相当快.有几个比例为2:1 - > 6:1,召回率高于5%.
第二次尝试:网格搜索
接下来,我想测试不同的正则化参数,所以我使用了GridSearchCV并制作了一个C参数的几个值的网格class_weight.将我的n:m比例的负面:正面训练样本翻译成字典语言,class_weight我认为我只是指定了几个字典,如下所示:
{ 0:0.67, 1:0.33 } #expected 2:1
{ 0:0.75, 1:0.25 } #expected 3:1
{ 0:0.8, 1:0.2 } #expected 4:1
Run Code Online (Sandbox Code Playgroud)
我也包括None和auto.
这次结果完全被摧毁了.对于class_weight除了的每个值,我的所有召回都很小(<0.05)auto.所以我只能假设我对如何设置class_weight字典的理解是错误的.有趣的是,class_weight网格搜索中'auto' 的值对于所有值都是59%左右C,我猜它平衡为1:1?
我的问题
1)如何正确使用class_weight来实现训练数据的不同平衡,从实际给出的数据?具体来说,我传给什么词典class_weight使用n:m比例的负面:正面训练样本?
2)如果您将各种class_weight词典传递给GridSearchCV,在交叉验证期间它会根据字典重新平衡训练折叠数据,但是使用真实的给定样本比例来计算测试折叠上的评分函数?这是至关重要的,因为任何度量标准仅对我有用,如果它来自观察到的比例的数据.
3)就比例而言auto,class_weight做什么的价值是多少?我阅读了文档,我假设"平衡数据与它们的频率成反比"只是意味着它以1:1的比例.它是否正确?如果没有,有人可以澄清吗?
非常感谢,任何澄清将不胜感激!
我正在使用sklearn并且亲和力传播有问题.我已经构建了一个输入矩阵,我不断收到以下错误.
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Run Code Online (Sandbox Code Playgroud)
我跑了
np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True
Run Code Online (Sandbox Code Playgroud)
我试过用
mat[np.isfinite(mat) == True] = 0
Run Code Online (Sandbox Code Playgroud)
删除无限值但这也不起作用.我该怎么做才能摆脱矩阵中的无限值,以便我可以使用亲和传播算法?
我正在使用anaconda和python 2.7.9.
我正在处理情绪分析问题,数据看起来像这样:
label instances
5 1190
4 838
3 239
1 204
2 127
Run Code Online (Sandbox Code Playgroud)
所以我的数据是不平衡的,因为1190 instances标有5.对于分类我使用scikit的SVC.问题是我不知道如何以正确的方式平衡我的数据,以便准确计算多类案例的精确度,召回率,准确度和f1分数.所以我尝试了以下方法:
第一:
wclf = SVC(kernel='linear', C= 1, class_weight={1: 10})
wclf.fit(X, y)
weighted_prediction = wclf.predict(X_test)
print 'Accuracy:', accuracy_score(y_test, weighted_prediction)
print 'F1 score:', f1_score(y_test, weighted_prediction,average='weighted')
print 'Recall:', recall_score(y_test, weighted_prediction,
average='weighted')
print 'Precision:', precision_score(y_test, weighted_prediction,
average='weighted')
print '\n clasification report:\n', classification_report(y_test, weighted_prediction)
print '\n confussion matrix:\n',confusion_matrix(y_test, weighted_prediction)
Run Code Online (Sandbox Code Playgroud)
第二:
auto_wclf = SVC(kernel='linear', C= 1, class_weight='auto')
auto_wclf.fit(X, y)
auto_weighted_prediction = auto_wclf.predict(X_test)
print 'Accuracy:', accuracy_score(y_test, auto_weighted_prediction)
print …Run Code Online (Sandbox Code Playgroud) python nlp artificial-intelligence machine-learning scikit-learn
我有一个带有混合类型列的pandas数据帧,我想将sklearn的min_max_scaler应用于某些列.理想情况下,我想在适当的位置进行这些转换,但还没有想出办法.我编写了以下代码:
import pandas as pd
import numpy as np
from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler()
dfTest = pd.DataFrame({'A':[14.00,90.20,90.95,96.27,91.21],'B':[103.02,107.26,110.35,114.23,114.68], 'C':['big','small','big','small','small']})
min_max_scaler = preprocessing.MinMaxScaler()
def scaleColumns(df, cols_to_scale):
for col in cols_to_scale:
df[col] = pd.DataFrame(min_max_scaler.fit_transform(pd.DataFrame(dfTest[col])),columns=[col])
return df
dfTest
A B C
0 14.00 103.02 big
1 90.20 107.26 small
2 90.95 110.35 big
3 96.27 114.23 small
4 91.21 114.68 small
scaled_df = scaleColumns(dfTest,['A','B'])
scaled_df
A B C
0 0.000000 0.000000 big
1 0.926219 0.363636 small
2 0.935335 0.628645 big
3 1.000000 …Run Code Online (Sandbox Code Playgroud) 只是尝试做一个简单的线性回归,但我对这个错误感到困惑:
regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)
Run Code Online (Sandbox Code Playgroud)
产生:
ValueError: Found arrays with inconsistent numbers of samples: [ 1 999]
Run Code Online (Sandbox Code Playgroud)
这些选择必须具有相同的尺寸,它们应该是numpy数组,所以我缺少什么?
scikit-learn ×10
python ×7
pandas ×3
dataframe ×2
numpy ×2
nlp ×1
python-2.7 ×1
regression ×1
scipy ×1
statsmodels ×1
valueerror ×1