libsvm与dataframe格式相互转换

###将libsvm转为dataframe
from sklearn.datasets import load_svmlight_file
from pandas import DataFrame
import pandas as pd
X_train, y_train = load_svmlight_file("libsvm_data.txt")
mat = X_train.todense() 

df1 = pd.DataFrame(mat)
df1.columns = ['sepal_length',  'sepal_width',  'petal_length',  'petal_width']

df2 = pd.DataFrame(y_train)
df2.columns = ['target']

df = pd.concat([df2, df1], axis=1) ##第一列为target
df.to_csv("df_data.txt", index=False)



###将dataframe转为libsvm
import pandas as pd
from sklearn.datasets import dump_svmlight_file
df = pd.read_csv("data.txt") ##第一个字段为target
y = df.target #y为数据的label值
dummy = pd.get_dummies(df.iloc[:, 1:])
mat = dummy.as_matrix()
dump_svmlight_file(mat, y, 'svm_output.libsvm', zero_based=False)  ##默认为zero_based=True,转换后的字段编号从0开始
###先进行独热,然后将数据转为libsvm
import pandas as pd
from sklearn.datasets import dump_svmlight_file
df = pd.read_excel("D:/data/test_info.xlsx")
df['target'] = df['status'].apply(lambda x: 1 if x=='Yes' else 0)  ##{'Yes':1, 'No':0}
del df['status']
##df.dtypes
##df.loc[:,df.dtypes=='object']


df2 = df.iloc[:,1:-1] ##取第二列至倒数第二列
df_get_dummies = pd.get_dummies(df2.loc[:,df.dtypes=='object'])
df3 = pd.concat([df.target, df.score, df_get_dummies], axis=1)



"""
df3
Out[32]: 
   target  score  gender_female  gender_male  level_L  level_M  level_S
0       1    100              1            0        0        0        1
1       0     90              1            0        0        1        0
2       1     95              0            1        0        1        0
3       1     93              0            1        1        0        0
4       0     98              1            0        0        0        1
5       0     94              0            1        1        0        0

"""


##接着转为libsvm
y = df3.target
dummy = pd.get_dummies(df3.iloc[:, 1:])
mat = dummy.as_matrix()
dump_svmlight_file(mat, y, 'test_output.libsvm', zero_based=False) 

##output of results ,字段为0的已压缩
"""
1 1:100 2:1 6:1
0 1:90 2:1 5:1
1 1:95 3:1 5:1
1 1:93 3:1 4:1
0 1:98 2:1 6:1
0 1:94 3:1 4:1
"""

###test_info.xlsx
"""
name	score	gender	level	status
Alice	100	female	S	Yes
Bella	90	female	M	No
Cart	95	male	M	Yes
David	93	male	L	Yes
Ella	98	female	S	No
Fred	94	male	L	No
"""

##http://m.blog.csdn.net/gao1440156051/article/details/55096630

##get_dummies的利与弊

1、get_dummies 不像 sklearn 的 transformer一样,有 transform方法,所以一旦测试集中出现了训练集未曾出现过的特征取值,简单地对测试集、训练集都用 get_dummies 方法将导致数据错误。

2、不是 sklearn 里的transformer类型,所以得到的结果得手动输入到 sklearn 里的相应模块,也无法像 sklearn 的transformer一样可以输入到pipeline中 进行流程化地机器学习过程。

转载于:https://my.oschina.net/kyo4321/blog/1587881

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值