scikit-learn数据挖掘,机器学习的库
基于Python的数据挖掘和机器学习的工具包
##encoding=utf-8
'''
scikit-learn 是基于python的数据挖掘建模和机器学习的工具包
可以非常方便的实现分类、回归、降维等数据挖掘和机器学习的常用的操作
是基于python的高级数据分析中非常重要的工具包
官网:http://scikit-learn.org/
也是开源软件,可以在github上找到开源的代码
Github:https://github.com/scikit-learn/scikit-learn
1、机器学习与决策树Machine learning&Decision Tree
2、scikit-learn实现决策树Realizing Decision Tree
机器学习
权威解释:计算机程序如何随着经验积累自动提高性能
实际上,机器学习模拟的是人的学习,人做出决定的时候是基于以往的经验
机器的经验是历史数据,本质是函数
例如:垃圾邮件检测
是否群发或者邮件内容是否包含链接是判断是否是垃圾邮件的重要因子,我们事先告诉机器哪些是垃圾邮件哪些不是
基于我们定义的属性以及定义需要用到的数据,就可以得到一个判断邮件是否是垃圾邮件的模型
下次输入参数的时候,机器可以根据训练好的模型(或者可以称为一个函数)作出判断
这其中最基础的就是数据,对做决定起着最重要的关键作用的就是机器学习算法
机器学习:因子----》结果
结果:不打标记----》无监督学习(例如:对植物的分类,不知道属性是什么,只是简单的聚类)
打标记----》监督学习(例如垃圾邮件检测,我们会告诉机器到底是不是垃圾邮件,需要打标记)
如果打标记的数据结果是有限离散的----》分类算法
如果打标机的数据结果是连续的----》回归算法
决策树:监督学习 树形结构
每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别
例如是否出去玩,天气是sunny有2个出去玩3个不出去玩,如果是rain有3个出去玩2个不出去玩,如果晴天的情况下再看湿度
可以利用信息熵的概念H(U)=E[-logpi],所有概率*log概率的和结果取负值
把原始数据集分类成几部分之后可以得到新的信息熵,叶子信息熵=本节点算法*(叶子实例集个数占上节点总个数的比值)
叶子信息熵和上节点信息熵差值最大的当做判断条件
'''
#scikit-learn 实现决策树
# Iris数据集,多重变量数据集
# 1、花萼长度;2花萼宽度;3、花瓣长度;4、花瓣宽度;通过这四种属性判断出鸢尾属于哪个种类
# 5、种类:Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾)、Virginica(维吉尼亚鸢尾)
#数据挖掘和机器学习大致分为三个步骤:1数据预处理2数据建模3结果验证
import numpy as np
import pandas as pd
def main():
#Pre-processing
from sklearn.datasets import load_iris
iris=load_iris()
print(iris)#结果有个data属性就是四种属性值共150个值,target是标注共三类
print(len(iris["data"]))#数据预处理有很多种,比如降维处理,由于鸢尾数据比较规则,所以只进行一步
from sklearn.cross_validation import train_test_split
train_data,test_data,train_target,test_target=train_test_split(iris.data,iris.target,test_size=0.2,random_state=1)
#把数据分为验证数据和测试数据,比例是test_size设置为0.2,即验证数据集占整体20%,random_state=1表示随机的选择
#上面表示预处理结束,下面进行建模
#Model
from sklearn import tree#引入决策树
clf=tree.DecisionTreeClassifier(criterion="entropy")#建立一个决策树分类器,标准选择entropy
clf.fit(train_data,train_target)#用训练集进行训练,用train_data和train_target建立了一种决策树关系
y_pred=clf.predict(test_data)#用test_data进行预测
#sklearn大多数的模型都会有fit(表示建立模型)和predict(表示预测)结构
#下面开始验证
#Verify 用两种方法进行验证1准确率2混淆矩阵
from sklearn import metrics
print(metrics.accuracy_score(y_true=test_target,y_pred=y_pred))#得结果96.6%表示准确率比较高
#y_true表示真实的值,y_pred右边录入预测值
print(metrics.confusion_matrix(y_true=test_target,y_pred=y_pred))
#混淆矩阵的横轴表示实际值,纵轴表示预测值,最理想情况下是对角矩阵,两边都是0
#决策树可以直接输出到文件
with open("./data/tree.dot","w") as fw:
tree.export_graphviz(clf,out_file=fw)
if __name__=='__main__':
main()
scikit-learn :数据挖掘建模 机器学习

#scikit-learn数据分析官网:
sciket-learn官网