loc\iloc\ix三种索引的区别与用法
loc 在index的标签上进行索引,范围包括start和end.
iloc 在index的位置上进行索引,不包括end.
ix 先在index的标签上索引,索引不到就在index的位置上索引(如果index非全整数),不包括end.
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pandas as pd
filename='E:\pycharm\python数据分析与挖掘实战数据及源码\chapter5\demo\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 LR
from 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%
在这里
from sklearn.linear_model import RandomizedLogisticRegression as RLR
会报错,sklearn库中已经没有了RLR,这种随机逻辑回归算法已经被淘汰。移到 scikit_contrib 项目里的 stable_selection库里了。所以上述代码会报错。
另:as_matrix()将表格转化为矩阵的方法也被淘汰,使用DataFrame.values
ID3决策树算法
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pandas as pd
filename='E:\pycharm\python数据分析与挖掘实战数据及源码\chapter5\demo\data\sales_data.xls'
data=pd.read_excel(filename,index_col=u'序号')
#数据是类别标签
#用1来表示好、是、高这三个属性,-1表示坏,否,低
data[data==u'好']=1
data[data==u'是']=1
data[data==u'高']=1
data[data!=1]=-1
x=data.iloc[:,:3].as_matrix().astype(int)
y=data.iloc[:,3].as_matrix().astype(int)
from sklearn.tree import DecisionTreeClassifier as DTC
dtc=DTC(criterion='entropy')#entropy=熵
dtc.fit(x,y)
#导入相关函数,可视化决策树
#导出的结果是一个dot文件,需要安装Graphviz才能将它转换为pdf或png等格式
from sklearn.tree import export_graphviz
x = pd.DataFrame(x)
from sklearn.externals.six import StringIO
x = pd.DataFrame(x)
with open("E:\\pycharm\\python数据分析与挖掘实战数据及源码\\chapter5\\demo\\tmp\\tree.dot",'w') as f:
f=export_graphviz(dtc,feature_names=x.columns,out_file=f)
问题1:
[Errno 22] Invalid argument
文件路径错了,\t、\s会产生歧义
解决办法\改成\,或改成/
问题2:
Traceback (most recent call last):
File “E:/pycharm/挖掘建模/决策树.py”, line 25, in
f=export_graphviz(dtc,feature_names=x.columns,out_file=f)
AttributeError: ‘numpy.ndarray’ object has no attribute 'columns’
我也不知道为啥
只要在两个调用sklearn库函数后加上x = pd.DataFrame(x)即可
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#神经网络算法预测销量高低
import pandas as pd
inputfile='E:\\pycharm\\python数据分析与挖掘实战数据及源码\\chapter5\\demo\\data\\sales_data.xls'
data=pd.read_excel(inputfile,index_col=u'序号')
data[data==u'好']=1
data[data==u'是']=1
data[data==u'高']=1
data[data!=1]=0
x=data.iloc[:,:3].as_matrix().astype(int)
y=data.iloc[:,3].as_matrix().astype(int)
from keras.models import Sequential
from keras.layers.core import Dense,Activation
import tensorflow
model=Sequential()#建立模型
model.add(Dense(input_dim=3,output_dim=10))
model.add(Activation('relu'))#用relu函数作为激活函数,能大幅提供准确度
model.add(Dense(input_dim=10,output_dim=1))
model.add(Activation('sigmoid'))#由于是01函数,用sigmoid函数作为激活函数
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics=['accuracy'])
#编译模型,由于我们做的是二元分类,所以我们指定损失函数为binary_crosssentropy,以及模式为binary
#另外常见的损失函数还有mean_squared_error,categorical_crosssentropy等
#求解方法我们指定用adam,还有sgd,emsprop
model.fit(x,y,nb_epoch=1000,batch_size=10)#训练模型,学习一千次
yp=model.predict_classes(x).reshape(len(y))
from cm_plot import *
cm_plot(y,yp).show()
问题1:如何安装cm_plot函数
# cm_plot.py 文件,包括了混淆矩阵可视化函数,
# 放置在python的site-packages 目录,供调用
#-*- coding: utf-8 -*-
def cm_plot(y, yp):
from sklearn.metrics import confusion_matrix #导入混淆矩阵函数
cm = confusion_matrix(y, yp) #混淆矩阵
import matplotlib.pyplot as plt #导入作图库
plt.matshow(cm, cmap=plt.cm.Greens) #画混淆矩阵图,配色风格使用cm.Greens,更多风格请参考官网。
plt.colorbar() #颜色标签
for x in range(len(cm)): #数据标签
for y in range(len(cm)):
plt.annotate(cm[x,y], xy=(x, y), horizontalalignment='center', verticalalignment='center')
plt.ylabel('True label') #坐标轴标签
plt.xlabel('Predicted label') #坐标轴标签
return plt
第一次我是在D:\python\python37\Lib\site-packages建立了一个cm_plot的文件夹,然后把cm_plot.py文件放到这个文件夹里,发现调用的时候除了问题。所以只要直接把py文件放进去就可以了。
,问题2:需要安装tensorflow模块
问题3:报错:(‘Some keys in session_kwargs are not supported at this time: %s’, dict_keys([‘class_mode’]))
解决:链接