机器学习--Logistic Regression(scikit-learn_ 预测疝气病症病马死亡率问题)
2017-12-03 21:21
302 查看
据说,心情不好的时候,整理东西可以让好心情回归,那么同理,懒散得想要沉沦时候,总结知识可以召回学习的神龙。
scikit-learn的所有模型都被称作有监督估计器,训练估计器要用到fit(x,y)函数,其中x指观察到的特征,y指的是目标。估计器经过训练后,可以预测任何标签未知的新数据x的y指,其中预测是通过predict(x)函数完成
练习机器学习算法,没有现成数据的可以用Iris数据集
1、认识iris数据集:
注1:元数据
数据是指实际数据,而元数据指描述数据的数据,描述一个数据特征的系统数据,如访问权限、存储位置、文件拥有者等……
更多练习可参考:
http://blog.csdn.net/sileixinhua/article/details/70477303
2、scikit-learn中的metrics以及logistic预测疝气病症病马死亡率问题
(参考《机器学习实战》)
2.2、函数实现
可以发现测试集和训练集的操作雷同,所以用函数实现,更方便
结果相同:
解决思路:
result = [float(i) for i in list]
问题2:
原因:
python3.x range返回的是range对象,不返回数组对象
解决思路:
data = range(m) 改为 data = list(range(m))
问题3:
原因:
fit函数不支持字符串形式
思路:
运用pandas库的数据类型进行转
学习回顾:
认识sklearn:scikit-learn,Python库之一,Scipy(Scientific Python,Python科学计算)工具集的一部分,该库整合了多种机器学习算法,因此可用scikit-learn库实现机器学习,可用来预测模型的创建和验证。scikit-learn的所有模型都被称作有监督估计器,训练估计器要用到fit(x,y)函数,其中x指观察到的特征,y指的是目标。估计器经过训练后,可以预测任何标签未知的新数据x的y指,其中预测是通过predict(x)函数完成
练习机器学习算法,没有现成数据的可以用Iris数据集
1、认识iris数据集:
#导入 from sklearn import datasets #鸢尾花卉数据集的所有数据和元数据(注1)都加载到iris变量中 iris = datasets.load_iris()
注1:元数据
数据是指实际数据,而元数据指描述数据的数据,描述一个数据特征的系统数据,如访问权限、存储位置、文件拥有者等……
#使用iris变量的data属性,查看所含数据 iris.data
#150个 元素,每个元素四个数值 Out[3]: array([[ 5.1, 3.5, 1.4, 0.2], [ 4.9, 3. , 1.4, 0.2], [ 4.7, 3.2, 1.3, 0.2], [ 4.6, 3.1, 1.5, 0.2], [ 5. , 3.6, 1.4, 0.2], [ 5.4, 3.9, 1.7, 0.4], [ 4.6, 3.4, 1.4, 0.3], [ 5. , 3.4, 1.5, 0.2], [ 4.4, 2.9, 1.4, 0.2], [ 4.9, 3.1, 1.5, 0.1], [ 5.4, 3.7, 1.5, 0.2], [ 4.8, 3.4, 1.6, 0.2], [ 4.8, 3. , 1.4, 0.1] ...... ])
#查看花卉种类 iris.target Out[4]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
#查看花卉类别 iris.target_names Out[5]: array(['setosa', 'versicolor', 'virginica'], dtype='<U10') #0代表Setosa 1代表Versicolour 2代表 Virginica
#散点图 import matplotlib.pyplot as plt import matplotlib.patches as mpatches from sklearn import datasets iris = datasets.load_iris() x = iris.data[:,3]#萼片长度(数据集第四列元素赋值给变量x) y = iris.data[:,2]#宽度 #可更改查看区别,当长度为第四列,宽度为第三列时效果最明显 #花卉类别 target = iris.target #计算散点图x轴最小值,最大值 x_min,x_max = x.min() - 0.5,x.max()+0.5 y_min,y_max = y.min() - 0.5,y.max()+0.5 plt.figure() plt.title("Iris dataset classification",size = 15) plt.scatter(x,y,c=target) plt.xlable("length") plt.ylabel("width") plt.xlim(x_min,x_max) plt.ylim(y_min,y_max) plt.xticks(()) plt.yticks(()) plt.plot() #保存为png图片 plt.savefig('iris.png') plt.show()
更多练习可参考:
http://blog.csdn.net/sileixinhua/article/details/70477303
2、scikit-learn中的metrics以及logistic预测疝气病症病马死亡率问题
(参考《机器学习实战》)
from sklearn import linear_model from sklearn import metrics from sklearn.metrics import accuracy_score #训练集 frtrain = open('horseColicTraining.txt') train_data = [] train_target = [] for line in frtrain.readlines(): lineArr = line.strip().split('\t') train_data.append([float(inst) for inst in lineArr[:-1]]) train_target.append(float(lineArr[-1])) #测试集 frtest = open('horseColicTest.txt') test_data = [] test_target = [] for line in frtest.readlines(): lineArr = line.strip().split('\t') test_data.append([float(inst) for inst in lineArr[:-1]]) test_target.append(float(lineArr[-1])) #利用logistic回归模型训练数据 clf = linear_model.LogisticRegression() clf = clf.fit(train_data,train_target) predicted=clf.predict(test_data) expected=test_target print(metrics.classification_report(expected, predicted)) print(metrics.confusion_matrix(expected, predicted)) print('The accuracy of logistic is :',accuracy_score(test_target,predicted))
precision recall f1-score support 0.0 0.54 0.65 0.59 20 1.0 0.84 0.77 0.80 47 avg / total 0.75 0.73 0.74 67 [[13 7] [11 36]] The accuracy of logistic is : 0.731343283582
2.2、函数实现
可以发现测试集和训练集的操作雷同,所以用函数实现,更方便
from sklearn import linear_model from sklearn import metrics from sklearn.metrics import accuracy_score def loadData(filename): fr = open(filename).readlines() data = [] target = [] for line in fr: lineArr = line.strip().split('\t') data.append([float(inst) for inst in lineArr[:-1]]) target.append(float(lineArr[-1])) return data,target train_data,train_target = loadData('horseColicTraining.txt') test_data,test_target = loadData('horseColicTest.txt') clf = linear_model.LogisticRegression() clf = clf.fit(train_data,train_target) predicted=clf.predict(test_data) expected=test_target print(metrics.classification_report(expected, predicted)) print(metrics.confusion_matrix(expected, predicted)) print('The accuracy of logistic is :',accuracy_score(test_target,predicted))
结果相同:
precision recall f1-score support 0.0 0.54 0.65 0.59 20 1.0 0.84 0.77 0.80 47 avg / total 0.75 0.73 0.74 67 [[13 7] [11 36]] The accuracy of logistic is : 0.731343283582
错误回顾:
问题1:TypeError: Cannot cast array data from dtype('float64') to dtype('<U32') according to the rule 'safe'
解决思路:
result = [float(i) for i in list]
问题2:
'range' object doesn't support item deletion
原因:
python3.x range返回的是range对象,不返回数组对象
解决思路:
data = range(m) 改为 data = list(range(m))
问题3:
Could not convert string to float:’young’
原因:
fit函数不支持字符串形式
思路:
运用pandas库的数据类型进行转
相关文章推荐
- 《机器学习实战》Logisic回归算法(2)之从疝气病症预测病马的死亡率
- 机器学习的相关模块安装:pandas,numpy, scipy,scikit_learn(sklearn), matplotlib在winows系统下的安装问题
- 【机器学习】使用Scikit-Learn库的L2正则化解决过拟合问题
- 机器学习精简教程之三——用scikit-learn求解多元线性回归问题
- Logistic 回归(sigmoid函数,手机的评价,梯度上升,批处理梯度,随机梯度,从疝气病症预测病马的死亡率
- Logistic回归数学公式推导及疝气病症预测病马死亡率
- [置顶] 利用Logistic回归预测疝气病症的病马的死亡率
- Logistic回归---从疝气病症预测马的死亡率
- 【机器学习】使用Scikit-Learn库的核SVM解决非线性问题
- 机器学习之pip安装scikit-learn问题解决
- 机器学习精简教程之二——用scikit-learn求解一元线性回归问题
- 基于Python和Scikit-Learn的机器学习介绍
- 如何使用 scikit-learn 为机器学习准备文本数据
- 【Scikit-Learn 中文文档】预测目标 (y) 的转换 - 数据集转换 - 用户指南 | ApacheCN
- 在win10上安装机器学习所需的各种python包(NumPy、scipy、scikit-learn、pandas)
- 【Scikit-Learn 中文文档】预测目标 (y) 的转换 - 数据集转换 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】机器学习: scikit-learn 中的设置以及预估对象 - 关于科学数据处理的统计学习教程 - scikit-learn 教程 | ApacheCN
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习 - scikit-learn 教程 | ApacheCN
- 【Scikit-Learn 中文文档】监督学习:从高维观察预测输出变量 - 关于科学数据处理的统计学习教程 - scikit-learn 教程 | ApacheCN
- 【Scikit-Learn 中文文档】监督学习:从高维观察预测输出变量 - 关于科学数据处理的统计学习教程 - scikit-learn 教程 | ApacheCN