在学习《Python数据分析与挖掘实战》这本书的同学会发现,如果对第五章的5-1示例代码不加修改会出现这样的错误:IndexError: boolean index did not match indexed array along dimension 0; dimension is 9 but corresponding boolean dimension is 8.
小编去网上了找了一圈解决办法,结果没有找到,甚是失望,于是自己发奋想出一个办法,在这里分享给大家。
这是书上的代码:
#-*- coding: utf-8 -*-#逻辑回归 自动建模import pandas as pd#参数初始化filename = '../data/bankloan.xls'data = pd.read_excel(filename)x = data.iloc[:,:8].as_matrix()y = data.iloc[:,8].as_matrix()from sklearn.linear_model import LogisticRegression as LRfrom sklearn.linear_model import RandomizedLogisticRegression as RLR rlr = RLR() #建立随机逻辑回归模型,筛选变量rlr.fit(x, y) #训练模型rlr.get_support() #获取特征筛选结果,也可以通过.scores_方法获取各个特征的分数print(u'通过随机逻辑回归模型筛选特征结束。')print(u'有效特征为:%s' % ','.join(data.columns[rlr.get_support()]))x = data[data.columns[rlr.get_support()]].as_matrix() #筛选好特征lr = LR() #建立逻辑货柜模型lr.fit(x, y) #用筛选后的特征数据来训练模型print(u'逻辑回归模型训练结束。')print(u'模型的平均正确率为:%s' % lr.score(x, y)) #给出模型的平均正确率,本例为81.4%
运行出现的错误的意思就是导入的数据的列数和相应的布尔维不同,其实这时我们把数据的相应列去除即可,修改后的代码如下:
#-*- coding: utf-8 -*-
#逻辑回归 自动建模
importpandasaspd
#参数初始化
filename ='../data/bankloan.xls'
data = pd.read_excel(filename)x = data.iloc[:,:8].as_matrix()y = data.iloc[:,8].as_matrix()
fromsklearn.linear_modelimportLogisticRegressionasLR
fromsklearn.linear_modelimportRandomizedLogisticRegressionasRLR rlr = RLR()#建立随机逻辑回归模型,筛选变量
rlr.fit(x, y)#训练模型
rlr.get_support()#获取特征筛选结果,也可以通过.scores_方法获取各个特征的分数
print(u'通过随机逻辑回归模型筛选特征结束。')data2 = data.drop('违约',1)#去除y列
print(u'有效特征为:%s'%','.join(data2.columns[rlr.get_support()]))x = data[data2.columns[rlr.get_support()]].as_matrix()#筛选好特征
lr = LR()#建立逻辑货柜模型
lr.fit(x, y)#用筛选后的特征数据来训练模型
print(u'逻辑回归模型训练结束。')print(u'模型的平均正确率为:%s'% lr.score(x, y))#给出模型的平均正确率,本例为81.4%
运行修改后的代码,就可以得到正确结果了:
本公众号原创作品,未经授权禁止转载,特此声明,谢谢合作!
领取专属 10元无门槛券
私享最新 技术干货