【问题标题】:train_test_split 不拆分数据
【发布时间】:2018-12-10 01:30:57
【问题描述】:

有一个数据框,总共由 14 列组成,最后一列是整数值 = 0 或 1 的目标标签。

我已经定义了:

  1. X = df.iloc[:,1:13] ---- 这由特征值组成
  2. y = df.iloc[:,-1] ------ 这由相应的标签组成

两者都具有所需的相同长度,X 是由 13 列组成的数据框,形状为 (159880, 13),y 是形状为 (159880,) 的数组类型

但是当我在X,y 上执行train_test_split() 时,该功能无法正常工作。

下面是简单的代码:

X_train, y_train, X_test, y_test = train_test_split(X, y, random_state = 0)

在此拆分之后,X_trainX_test 都具有形状 (119910,13)。 y_train 具有形状 (39970,13) 和 y_test 具有形状 (39970,)

这很奇怪,即使定义了test_size参数,结果还是一样。

请告知,可能出了什么问题。

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from adspy_shared_utilities import plot_feature_importances
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

def model():
    
    df = pd.read_csv('train.csv', encoding = 'ISO-8859-1')
    df = df[np.isfinite(df['compliance'])]
    df = df.fillna(0)
    df['compliance'] = df['compliance'].astype('int')
    df = df.drop(['grafitti_status', 'violation_street_number','violation_street_name','violator_name',
                  'inspector_name','mailing_address_str_name','mailing_address_str_number','payment_status',
                  'compliance_detail', 'collection_status','payment_date','disposition','violation_description',
                  'hearing_date','ticket_issued_date','mailing_address_str_name','city','state','country',
                  'violation_street_name','agency_name','violation_code'], axis=1)
    df['violation_zip_code'] = df['violation_zip_code'].replace(['ONTARIO, Canada',', Australia','M3C1L-7000'], 0)
    df['zip_code'] = df['zip_code'].replace(['ONTARIO, Canada',', Australia','M3C1L-7000'], 0)
    df['non_us_str_code'] = df['non_us_str_code'].replace(['ONTARIO, Canada',', Australia','M3C1L-7000'], 0)
    df['violation_zip_code'] = pd.to_numeric(df['violation_zip_code'], errors='coerce')
    df['zip_code'] = pd.to_numeric(df['zip_code'], errors='coerce')
    df['non_us_str_code'] = pd.to_numeric(df['non_us_str_code'], errors='coerce')
    #df.violation_zip_code = df.violation_zip_code.replace('-','', inplace=True)
    df['violation_zip_code'] = np.nan_to_num(df['violation_zip_code'])
    df['zip_code'] = np.nan_to_num(df['zip_code'])
    df['non_us_str_code'] = np.nan_to_num(df['non_us_str_code'])
    X = df.iloc[:,0:13]
    y = df.iloc[:,-1]
    X_train, y_train, X_test, y_test = train_test_split(X, y, random_state = 0)    
    print(y_train.shape)

【问题讨论】:

    标签: python scikit-learn train-test-split


    【解决方案1】:

    你把train_test_split的结果弄混了,应该是

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,random_state=0)
    

    【讨论】:

      【解决方案2】:
      if args.mode == "train":
      
          # Load Data
          data, labels = load_dataset('C:/Users/PC/Desktop/train/k')
      
          # Train ML models
          knn(data, labels,'C:/Users/PC/Desktop/train/knn.pkl' )
      

      【讨论】:

      • 您的答案不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决 OP 提出的问题。你可以在帮助中心找到更多关于如何写good answers的信息。
      猜你喜欢
      • 2021-05-10
      • 2021-08-16
      • 2019-09-27
      • 2018-08-09
      • 2021-01-28
      • 2012-11-01
      • 2017-06-12
      • 2017-06-11
      • 2021-02-07
      相关资源
      最近更新 更多