我的代码:
import pandas as pd
from sklearn.preprocessing import LabelEncoder
column_names = ["age","workclass","fnlwgt","education","education-num","marital-status","occupation","relationship","race","sex","capital-gain","capital-loss","hrs-per-week","native-country","income"]
adult_train = pd.read_csv("adult.data",header=None,sep=',\s',na_values=["?"])
adult_train.columns=column_names
adult_train.fillna('NA',inplace=True)
Run Code Online (Sandbox Code Playgroud)
我想要在不止一列中具有值“NA”的行的索引。是否有内置方法或者我必须逐行迭代并检查每列的值?这是数据的快照:
我想要像 398,409 这样的行的索引(B 和 G 列缺少值)而不是像 394 这样的行的索引(仅在 N 列缺少值)
我想在以下数据帧上使用来自 sklearn 的 TimeSeriesSplit 来预测总和:

因此,为了准备 X 和 y,我执行以下操作:
X = df.drop(['sum'],axis=1)
y = df['sum']
Run Code Online (Sandbox Code Playgroud)
然后将这两个喂给:
for train_index, test_index in tscv.split(X):
X_train01, X_test01 = X[train_index], X[test_index]
y_train01, y_test01 = y[train_index], y[test_index]
Run Code Online (Sandbox Code Playgroud)
通过这样做,我收到以下错误:
KeyError: '[ 0 1 2 ...] not in index'
Run Code Online (Sandbox Code Playgroud)
这里 X 是一个数据帧,显然这会导致错误,因为如果我将 X 转换为数组,如下所示:
X = X.values
Run Code Online (Sandbox Code Playgroud)
然后它会起作用。但是,为了以后对模型的评估,我需要 X 作为数据框。有什么方法可以将 X 保留为数据帧并将其提供给 tscv 而不将其转换为数组?
time-series pandas scikit-learn sklearn-pandas train-test-split
我正在使用数据集来查看薪水与大学GPA之间的关系.我正在使用sklearn线性回归模型.我认为系数应该是截距和coff.相应特征的价值.但该模型给出了单一价值.
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression
# Use only one feature : CollegeGPA
labour_data_gpa = labour_data[['collegeGPA']]
# salary as a dependent variable
labour_data_salary = labour_data[['Salary']]
# Split the data into training/testing sets
gpa_train, gpa_test, salary_train, salary_test = train_test_split(labour_data_gpa, labour_data_salary)
# Create linear regression object
regression = LinearRegression()
# Train the model using the training sets (first parameter is x )
regression.fit(gpa_train, salary_train)
#coefficients
regression.coef_
The output is : Out[12]: array([[ 3235.66359637]])
Run Code Online (Sandbox Code Playgroud) 我正在使用sklearn的multilabelbinarizer()来训练我的机器学习中的多个列,我用它来训练我的模型。
使用它后,我注意到它在逆变换时混淆了我的数据。我创建了一组随机值的测试集,在其中拟合数据、对其进行转换,然后inverse_transform将数据恢复为原始数据。
我进行了一个简单的测试jupyter笔记本上进行了一个简单的测试以显示错误:
在inverse_transformed第 1 行的值中,它混淆了州和月份。
首先,我的使用方式是否有错误multilabelbinarizer?有没有不同的方法来实现相同的输出?
编辑: 感谢@Nicolas M. 帮助我解决我的问题。我最终像这样解决了这个问题。
请原谅我的粗略解释,但结果比我最初想象的要复杂。我改用 thelabel_binarizer而不是multi_label_binarizer因为它
我最终腌制了label_binarizer defaultdict以便我可以加载它并在我的机器学习项目的不同模块中使用它。
一件可能不简单的事情是我向为每一列制作的数据帧添加新标题。它采用列名+列号的形式。我这样做是因为我需要对数据进行逆变换。为此,我搜索了包含原始列名称的列,该列名称将较大的数据帧分隔成各个列块。
这里是我使用的一些变量及其含义供参考:
lb_dict- 存储不同标签二值化器的默认字典。
binarize_df- 存储二进制数据的数据框。
binarized_label- label 将列中的一个标签二值化。
header- 创建一个新的标题形式:列名+数字列。
inverse_df- 存储逆变换数据的数据帧。
one_label_list- 查找具有原始列标签的列名称列表。
one_label_df- 创建一个新的数据框,仅存储一列的二值化数据。
single_label- 被反向转换成一列的二值化数据。
在此代码中,数据是我传递给函数的数据帧。
lb_dict = defaultdict(LabelBinarizer)
# create a place holder dataframe to join new binarized data to
binarize_df = pd.DataFrame(['x'] …Run Code Online (Sandbox Code Playgroud) python machine-learning pandas multilabel-classification sklearn-pandas