代码之家  ›  专栏  ›  技术社区  ›  Xavier

将字符串数据转换为浮点数据,然后传递到支持向量机分类器

  •  1
  • Xavier  · 技术社区  · 7 年前

    我的数据集如下:

    X_data = 
    
    BankNum   |  ID | 
    
    00987772  | AB123 | 
    00987772  | AB123 |
    00987772  | AB123 |
    00987772  | ED245 |
    00982123  | GH564 |
    

    y_data =
    
    ID  | Labels
    
    AB123 | High
    ED245 | Low
    GH564 | Low
    

    我正在做以下工作:

    from sklearn import svm
    from sklearn import metrics
    import numpy as np
    
    clf = svm.SVC(gamma=0.001, C=100., probability=True)
    X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.20, random_state=42)
    clf.fit(X_train, y_train)
    
    predicted = clf.predict(X_test)
    

    X_data 在我之前漂浮 clf.fit() ? 我能用吗 DictVectorizer 在这种情况下?如果是,那么我该如何使用它?

    还有,我要通过 y_data 通过 train_test_split 为了找出预测的准确性,但它会被正确地分割吗?正如在采取正确的 Label ID 在里面 X_数据 从…起 y_数据

    有人能告诉我我是否做得正确吗?

    new_df = pd.merge(df, df3, on="ID")
    columns = ['BankNum', 'ID']
    labels = new_df['Labels']
    le = LabelEncoder()
    labels = le.fit_transform(labels)
    X_train, X_test, y_train, y_test = train_test_split(new_df[columns], labels, test_size=0.25, random_state=42)
    X_train.fillna( 'NA', inplace = True )
    X_test.fillna( 'NA', inplace = True )
    x_cat_train = X_train.to_dict( orient = 'records' )
    x_cat_test = X_test.to_dict( orient = 'records' )
    vectorizer = DictVectorizer( sparse = False )
    vec_x_cat_train = vectorizer.fit_transform( x_cat_train )
    vec_x_cat_test = vectorizer.transform( x_cat_test )
    x_train = vec_x_cat_train
    x_test = vec_x_cat_test
    clf = svm.SVC(gamma=0.001, C=100., probability=True)
    clf.fit(x_train, y_train)
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Espoir Murhabazi    7 年前

    根据我们在评论中讨论的内容,我的建议是首先合并id列上的x_数据和y_数据集:

    dataset = pd.merge(left=x_data, right=y_data, on='index')
    

    您可以使用np将BANKacount列转换为float。A类型:

    dataset['Bank_Num'] = dataset.Bank_Num.astype(np.float128)
    

    NB(更新)

    dataset['Bank_Num'] = le.fit_transform(dataset.Bank_Num)
    

    通过使用标签编码器获取ID列的int表示:

    from sklearn.preprocessing import LabelEncoder,LabelBinarizer
    le = LabelEncoder()
    dataset['index'] = le.fit_transform(dataset.index)
    

    和使用labelBinarizer的y标签:

    lb = LabelBinarizer()
    dataset['label'] = lb.fit_transform(dataset.label)
    

    最好使测试尺寸低于列车尺寸,最好使用小于0.5的值作为测试尺寸 了解有关训练集和测试集大小的更多信息 here

    这样地:

    X_train, X_test, y_train, y_test = train_test_split(dataset[['index','Bank_Num']], dataset.label, test_size=0.25, random_state=42)
    

    有了它,您现在可以在没有任何问题的情况下训练分类器:

    clf.fit(X_train, y_train)
    

    让我知道这是否有帮助,以及我如何改进我的答案