如何解决dblink过多的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决dblink过多的问题相关的知识,希望对你有一定的参考价值。

参考技术A 能不能不用dblink,我现在用dblink都怕了。用dblink会同步两个数据库的scn值,万一有一台出问题。另外一台也会出问题的。你这样又是程序,又是trigger,很容易出事的,另外,如果你的Oracle是10.1及以下版
本,建议尽快升级
,这个版本的dblink有问题的。
ora-02068是由链接超时导致,重点问题在ora-03135,也就是你的DBlink上,先保证你的DBlink账号是通的,如果你的DBlink账号,在PLSQL客户端可以正常查询远程Oracle,接下来就检查你的程序中账号是否是dblink账号,权限以及防火墙是否正确。

如何解决“IndexError:数组索引过多”

【中文标题】如何解决“IndexError:数组索引过多”【英文标题】:How to resolve "IndexError: too many indices for array" 【发布时间】:2017-03-13 11:55:55 【问题描述】:

我下面的代码给了我以下错误“IndexError:数组索引太多”。我对机器学习很陌生,所以我不知道如何解决这个问题。任何形式的帮助将不胜感激。

train = pandas.read_csv("D:/...input/train.csv")


xTrain = train.iloc[:,0:54]
yTrain = train.iloc[:,54:]


from sklearn.cross_validation import cross_val_score
clf = LogisticRegression(multi_class='multinomial')
scores = cross_val_score(clf, xTrain, yTrain, cv=10, scoring='accuracy')
print('****Results****')
print(scores.mean())

【问题讨论】:

您确定train 看起来像您认为的那样吗? @DavidG train.shape 给了我 15120 x 55 。 55 列是我所期待的 您是否收到yTrainxTrain 部分的错误? @DavidG 谢谢。我能够通过给出 yTrain = train.target 而不是 yTrain = train.iloc[:,54:] 来解决它 【参考方案1】:

使用 Pandas Dataframe 逐步解释 ML(机器学习)代码:

    将预测列和目标列分别分成 X 和 y。

    拆分训练数据 (X_train,y_train) 和测试数据 (X_test,y_test)。

    计算交叉验证的 AUC(曲线下面积)。由于 y_train 导致错误“IndexError: too many indices for array”,因为它预期的是一维数组,但获取的二维数组不匹配。在替换代码 'y_train'y_train['y'] 代码后就像一个魅力


   # Importing Packages :

   import pandas as pd

   from sklearn.model_selection import cross_val_score

   from sklearn.model_selection import StratifiedShuffleSplit

   # Seperating Predictor and Target Columns into X and y Respectively :
   # df -> Dataframe extracted from CSV File

   data_X = df.drop(['y'], axis=1) 
   data_y = pd.DataFrame(df['y'])

   # Making a Stratified Shuffle Split of Train and Test Data (test_size=0.3 Denotes 30 % Test Data and Remaining 70% Train Data) :

   rs = StratifiedShuffleSplit(n_splits=2, test_size=0.3,random_state=2)       
   rs.get_n_splits(data_X,data_y)

   for train_index, test_index in rs.split(data_X,data_y):

       # Splitting Training and Testing Data based on Index Values :

       X_train,X_test = data_X.iloc[train_index], data_X.iloc[test_index]
       y_train,y_test = data_y.iloc[train_index], data_y.iloc[test_index]

       # Calculating 5-Fold Cross-Validated AUC (cv=5) - Error occurs due to Dimension of **y_train** in this Line :

       classify_cross_val_score = cross_val_score(classify, X_train, y_train, cv=5, scoring='roc_auc').mean()

       print("Classify_Cross_Val_Score ",classify_cross_val_score) # Error at Previous Line.

       # Worked after Replacing 'y_train' with y_train['y'] in above Line 
       # where y is the ONLY Column (or) Series Present in the Pandas Data frame 
       # (i.e) Target variable for Prediction :

       classify_cross_val_score = cross_val_score(classify, X_train, y_train['y'], cv=5, scoring='roc_auc').mean()

       print("Classify_Cross_Val_Score ",classify_cross_val_score)

       print(y_train.shape)

       print(y_train['y'].shape)

输出:

    Classify_Cross_Val_Score  0.7021433588790991
    (31647, 1) # 2-D
    (31647,)   # 1-D

注意:从 sklearn.model_selection 导入 cross_val_score。 cross_val_score 已导入 从 sklearn.model_selection 和 不是来自已弃用的 sklearn.cross_validation。

【讨论】:

嗨@MatthewStrawbridge,感谢您提及我已经编辑了我的答案。希望它对那些在使用 Pandas Dataframe 在 Python 中构建 ML 模型和交叉验证训练集时遇到同样错误的人来说是清楚和有帮助的 :-)【参考方案2】:

你得到的错误代码基本上是说你已经为你的数组声明了不适合它的内容。 我看不到您的数组的声明,但我假设它是一维的,并且程序反对您将其视为二维数组。

只需检查您的声明是否正确并在您设置它们后通过打印值来测试代码,以仔细检查它们是否符合您的预期。

已经有一些关于这个主题的现有问题,所以我将在这里链接一个可能有帮助的问题: IndexError: too many indices. Numpy Array with 1 row and 2 columns

【讨论】:

我明白了问题所在。列数在某处不匹配,但 train.shape 给了我 15120 x 55 。 55 列是我所期待的。【参考方案3】:

您收到此错误是因为您将目标数组“y”设为二维,而实际上需要为一维才能传递交叉验证函数。

这两种情况是不同的:

1. y=numpy.zeros(shape=(len(list),1))
2. y=numpy.zeros(shape=(len(list))) 

如果您像案例 1 一样声明 y,则 y 变为 2-D。但是您需要一个一维数组,因此需要使用案例 2。

【讨论】:

【参考方案4】:

在导入数据集并使用 Matplotlib 打印时,我可以使用 images[5540,:] 预览图像,其中 5540 是图像的 id,但在使用 labels[5540,:] 打印该图像的标签时,它会引发错误,例如索引值过多。

我发现标签只是一维数组,而我尝试打印的是二维数组,因此该语句返回的索引较少,因此引发错误。

对我有用的解决方案是labels[5540,]

【讨论】:

以上是关于如何解决dblink过多的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“IndexError:数组索引过多”

Variadic Macros:如何解决“宏的实际参数过多..”

如何解决 Node.js 中的“请求过多”错误?

如何解决代码中if…else 过多的问题

如何解决if else过多的问题,各种方法盘点

如何解决if else过多的问题,各种方法盘点