数据挖掘(Python)——利用sklearn进行数据挖掘,实现算法:svm、knn、C5.0、NaiveBayes
2015-01-15 00:26
1506 查看
<span style="line-height: 18px; font-family: Consolas, 'Courier New', Courier, mono, serif; background-color: rgb(255, 255, 255);">说明:下面程序将利用python中的sklearn包根据用户流失前的行为,对用户的流失进行预测</span>数据格式:lost表示是否流失,其他变量为用户的行为变量,下面是部分数据
import xlrd import string import sklearn from sklearn import svm from sklearn import neighbors from sklearn import cluster from sklearn import tree from sklearn import naive_bayes import numpy as np #--------数据加载开始-------------- def data_import(filepath): data=xlrd.open_workbook(filepath) table=data.sheet_by_index(0) nrows=table.nrows ncols=table.ncols result=[] result.append(table.row_values(0)) for i in range(1,nrows): result_0=[] for j in range(0,ncols): result_0=result_0+[table.cell(i,j).value] result.append(result_0) result=result[1:] return result filepath1=r'F:\data_retain.xls' result1=data_import(filepath1) count1=len(result1) target1=[] data1=[] for i in range(0,count1): data1.append(result1[i][1:]) target1.append(result1[i][0]) filepath2=r'F:\data_lost.xls' result2=data_import(filepath2) count2=len(result2) target2=[] data2=[] for i in range(0,count2): data2.append(result2[i][1:]) target2.append(result2[i][0]) data=[] target=[] len_1=10000 for i in range(0,len_1): data.append(data1[i]) target.append(target1[i]) len_2=10000 for i in range(0,len_2): data.append(data2[i]) target.append(target2[i]) #--------数据加载完毕-------------- class machine_learn: def svm_(self,data,target): #支持向量机算法预测 svc = svm.SVC(kernel='linear') svc.fit(data,target) predict_target=svc.predict(data) temp0_0=0 temp0_1=0 temp1_0=0 temp1_1=0 for i in range(0,len(target)): if predict_target[i]==0: if target[i]==0: temp0_0=temp0_0+1 else: temp0_1=temp0_1+1 else: if target[i]==0: temp1_0=temp1_0+1 else: temp1_1=temp1_1+1 kind_0_precision=temp0_0/(temp0_0+temp0_1) kind_0_penetration=temp0_0/(temp0_0+temp1_0) kind_1_precision=temp1_1/(temp1_0+temp1_1) kind_1_penetration=temp1_1/(temp0_1+temp1_1) return [[kind_0_precision,kind_0_penetration],[kind_1_precision,kind_1_penetration]] def knn_(self,data,target): #最邻近算法算法预测 knn = neighbors.KNeighborsClassifier() knn.fit(data,target) predict_target=knn.predict(data) temp0_0=0 temp0_1=0 temp1_0=0 temp1_1=0 for i in range(0,len(target)): if predict_target[i]==0: if target[i]==0: temp0_0=temp0_0+1 else: temp0_1=temp0_1+1 else: if target[i]==0: temp1_0=temp1_0+1 else: temp1_1=temp1_1+1 kind_0_precision=temp0_0/(temp0_0+temp0_1) kind_0_penetration=temp0_0/(temp0_0+temp1_0) kind_1_precision=temp1_1/(temp1_0+temp1_1) kind_1_penetration=temp1_1/(temp0_1+temp1_1) return [[kind_0_precision,kind_0_penetration],[kind_1_precision,kind_1_penetration]] def tree_(self,data,target): #决策树算法预测 tre = tree.DecisionTreeClassifier() tre.fit(data,target) predict_target=tre.predict(data) temp0_0=0 temp0_1=0 temp1_0=0 temp1_1=0 for i in range(0,len(target)): if predict_target[i]==0: if target[i]==0: temp0_0=temp0_0+1 else: temp0_1=temp0_1+1 else: if target[i]==0: temp1_0=temp1_0+1 else: temp1_1=temp1_1+1 kind_0_precision=temp0_0/(temp0_0+temp0_1) kind_0_penetration=temp0_0/(temp0_0+temp1_0) kind_1_precision=temp1_1/(temp1_0+temp1_1) kind_1_penetration=temp1_1/(temp0_1+temp1_1) return [[kind_0_precision,kind_0_penetration],[kind_1_precision,kind_1_penetration]] def bayes_(self,data,target): #使用贝叶斯算法预测(GaussianNB) bayes = naive_bayes.GaussianNB() bayes.fit(data,target) predict_target=bayes.predict(data) temp0_0=0 temp0_1=0 temp1_0=0 temp1_1=0 for i in range(0,len(target)): if predict_target[i]==0: if target[i]==0: temp0_0=temp0_0+1 else: temp0_1=temp0_1+1 else: if target[i]==0: temp1_0=temp1_0+1 else: temp1_1=temp1_1+1 kind_0_precision=temp0_0/(temp0_0+temp0_1) kind_0_penetration=temp0_0/(temp0_0+temp1_0) kind_1_precision=temp1_1/(temp1_0+temp1_1) kind_1_penetration=temp1_1/(temp0_1+temp1_1) return [[kind_0_precision,kind_0_penetration],[kind_1_precision,kind_1_penetration]] a=machine_learn() svm_method=a.svm_(data,target) print ('svm 方法预测,它的准确率可以达到 %f, 覆盖率达到 %f' % (svm_method[1][0],svm_method[1][1])) knn_method=a.knn_(data,target) print ('knn 方法预测,它的准确率可以达到 %f, 覆盖率达到 %f' % (knn_method[1][0],knn_method[1][1])) tree_method=a.tree_(data,target) print ('决策树 方法预测,它的准确率可以达到 %f, 覆盖率达到 %f' % (tree_method[1][0],tree_method[1][1])) bayes_method=a.bayes_(data,target) print ('NaiveBayes 方法预测,它的准确率可以达到 %f, 覆盖率达到 %f' % (bayes_method[1][0],bayes_method[1][1]))
1、当训练样本中,流失用户:留存用户调整为1:1时,决策树模型的前10个规则可以通过覆盖20%的频道用户来定位60%的流失用户
2、<span style="font-family: Arial, Helvetica, sans-serif;">当训练样本中,流失用户:留存用户调整为1:3时,决策树模型的前10个规则可以通过覆盖25.3%的频道用户来定位65.6%的流失用户</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="python">3、当训练样本中,流失用户:留存用户调整为1:1时,增加部分变量,决策树模型的前10个规则可以通过覆盖15%的频道用户来定位47%的流失用户
相关文章推荐
- 数据挖掘 --- Python实现KNN算法项目-约会推荐算法
- 机器学习与数据挖掘系列算法之--knn的python实现
- 机器学习与数据挖掘-K最近邻(KNN)算法的实现(java和python版)
- 利用python中的pandas,sklearn进行数据挖掘 basic_of_datamining
- python数据挖掘实践第一章 KNN算法,以及算法的实现
- 利用Python sklearn的SVM对AT&T人脸数据进行人脸识别
- 数据挖掘 --- Python实现KNN算法项目 - 水果分类
- 数据挖掘10大算法(6)-K最近邻(KNN)算法的实现(java和python版)
- Python数据挖掘07--KNN算法理论与实现
- 数据挖掘算法---KNN(附python代码)
- 数据挖掘(二)——Knn算法的java实现
- Caffe python利用classify.py实现对单通道(灰度图)的数据进行分类
- 『sklearn学习』利用 Python 练习数据挖掘
- 数据挖掘之决策树归纳算法的Python实现
- 利用python的sklearn开源包进行文本挖掘
- 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(上)
- python中利用KNN实现对iris进行分类
- 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(上)
- 数据挖掘之Apriori算法详解和Python实现代码分享
- 数据挖掘:K最近邻(KNN)算法的java实现