初识机器学习和线性分类器
2016-12-21 20:15
302 查看
机器学习是指程序不断地从经历和数据中吸取经验教训从而提高应对下一次任务的能力。
因此,机器学习的三要素是任务(Task)、经验(Experience)、和性能(Performance。
机器学习根据任务分类,有两类经典的任务是监督学习和非监督学习。
监督学习关注对未知表现的预测,一般包括分类和回归问题。分类是对事物的类别进行预测,类别是离散的,同时类别的数目也是事先知道的;回归的预测目标是连续的变量。
而无监督学习则倾向于对事物本身特性的分析,常用的技术包括数据降维,和聚类分析。降维是对事物的特性进行筛选,便于处理。而聚类是将相似的数据划分为一簇,但是与分类不同的是,我们事先并不知道分成多少簇,以及分成哪些簇。比如电子商务网站根据用户的信息及购买习惯投放相应的广告。
经验只能是那些对学习有用的信息,我们常常把反映事物内在规律的信息叫做特征。对于监督学习,我们所拥有的经验包括特征和目标\标记(Target\Label)。我们一般用一个特征向量来描述一个数据样本。标记或目标的表现形式则取决于监督学习的种类。
无监督学习没有标记或目标,因此无法进行预测,但是更加适合对数据结构的分析。我们可以获得大量的无监督数据,但是由于监督数据需要标记,会耗费大量的人力,因此,我们可以获得的数据量较少。
我们通常把既有某种特征,又有标记的数据作为训练集(Training Set),用来学习训练系统,从而获得系统的各个参数。
性能是评价程序完成任务的质量的好坏的指标,因此,我们需要具备与训练数据相同特性的测试数据集(Testng Set),用来得到系统的预测结果,将结果与正确结果进行比较,即可以知道我们估计的模型的准确程度。测试数据与训练数据是相互独立。
附上使用线性分类器来进行良/恶性肿瘤预测的问题的Python代码(代码来源于Python 机器学习及实践--从零开始通往Kaggle竞赛之路---范淼 李超著)
import pandas as pd//导入pandas module
df_train=pd.read_csv('D:/ML/breast-cancer-train.csv')//导入训练数据
df_test=pd.read_csv('D:/ML/breast-cancer-test.csv')//导入测试数据
df_test_negative=df_test.loc[df_test['Type']==0][['Clump Thickness', 'Cell Size']]
df_test_positive=df_test.loc[df_test['Type']==1][['Clump Thickness', 'Cell Size']]
import matplotlib.pyplot as plt//导入画图模块,画出测试数据中的良性肿瘤样本和恶性肿瘤样本,‘o’代表良性肿瘤
plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.show()
import numpy as np
intercept=np.random.random([1])//随机生成直线的截距和系数
coef=np.random.random([2])
lx=np.arange(0.12)
ly=-(-intercept-lx*coef[0])/coef[1]
plt.plot(lx,ly,c='yellow')//画出随机直线
plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.show()
from sklearn.linear_model import LogisticRegression//导入LogisticRegression分类器
lr=LogisticRegression()
lr.fit(df_train[['Clump Thickness','Cell Size']][0:10],df_train['Type'] [0:10])//使用前10条训练样本训练直线的截距和斜率
print 'Testing accuracy (10 training samples):',lr.score(df_test[['Clump Thickness', 'Cell Size']],df_test['Type'])
intercept=lr.intercept_
coef=lr.coef_[0,:]
ly=(-intercept-lx*coef[0])/coef[1]
plt.plot(lx,ly,c='green')
plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.show()
lr=LogisticRegression()
lr.fit(df_train[['Clump Thickness','Cell Size']] ,df_train['Type'])//使用所有训练样本训练直线的截距和斜率
print 'Testing accuracy all training samples):',lr.score(df_test[['Clump Thickness', 'Cell Size']],df_test['Type'])
intercept=lr.intercept_
coef=lr.coef_[0,:]
ly=(-intercept-lx*coef[0])/coef[1]
plt.plot(lx,ly,c='blue')
plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.show()
因此,机器学习的三要素是任务(Task)、经验(Experience)、和性能(Performance。
机器学习根据任务分类,有两类经典的任务是监督学习和非监督学习。
监督学习关注对未知表现的预测,一般包括分类和回归问题。分类是对事物的类别进行预测,类别是离散的,同时类别的数目也是事先知道的;回归的预测目标是连续的变量。
而无监督学习则倾向于对事物本身特性的分析,常用的技术包括数据降维,和聚类分析。降维是对事物的特性进行筛选,便于处理。而聚类是将相似的数据划分为一簇,但是与分类不同的是,我们事先并不知道分成多少簇,以及分成哪些簇。比如电子商务网站根据用户的信息及购买习惯投放相应的广告。
经验只能是那些对学习有用的信息,我们常常把反映事物内在规律的信息叫做特征。对于监督学习,我们所拥有的经验包括特征和目标\标记(Target\Label)。我们一般用一个特征向量来描述一个数据样本。标记或目标的表现形式则取决于监督学习的种类。
无监督学习没有标记或目标,因此无法进行预测,但是更加适合对数据结构的分析。我们可以获得大量的无监督数据,但是由于监督数据需要标记,会耗费大量的人力,因此,我们可以获得的数据量较少。
我们通常把既有某种特征,又有标记的数据作为训练集(Training Set),用来学习训练系统,从而获得系统的各个参数。
性能是评价程序完成任务的质量的好坏的指标,因此,我们需要具备与训练数据相同特性的测试数据集(Testng Set),用来得到系统的预测结果,将结果与正确结果进行比较,即可以知道我们估计的模型的准确程度。测试数据与训练数据是相互独立。
附上使用线性分类器来进行良/恶性肿瘤预测的问题的Python代码(代码来源于Python 机器学习及实践--从零开始通往Kaggle竞赛之路---范淼 李超著)
import pandas as pd//导入pandas module
df_train=pd.read_csv('D:/ML/breast-cancer-train.csv')//导入训练数据
df_test=pd.read_csv('D:/ML/breast-cancer-test.csv')//导入测试数据
df_test_negative=df_test.loc[df_test['Type']==0][['Clump Thickness', 'Cell Size']]
df_test_positive=df_test.loc[df_test['Type']==1][['Clump Thickness', 'Cell Size']]
import matplotlib.pyplot as plt//导入画图模块,画出测试数据中的良性肿瘤样本和恶性肿瘤样本,‘o’代表良性肿瘤
plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.show()
import numpy as np
intercept=np.random.random([1])//随机生成直线的截距和系数
coef=np.random.random([2])
lx=np.arange(0.12)
ly=-(-intercept-lx*coef[0])/coef[1]
plt.plot(lx,ly,c='yellow')//画出随机直线
plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.show()
from sklearn.linear_model import LogisticRegression//导入LogisticRegression分类器
lr=LogisticRegression()
lr.fit(df_train[['Clump Thickness','Cell Size']][0:10],df_train['Type'] [0:10])//使用前10条训练样本训练直线的截距和斜率
print 'Testing accuracy (10 training samples):',lr.score(df_test[['Clump Thickness', 'Cell Size']],df_test['Type'])
intercept=lr.intercept_
coef=lr.coef_[0,:]
ly=(-intercept-lx*coef[0])/coef[1]
plt.plot(lx,ly,c='green')
plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.show()
lr=LogisticRegression()
lr.fit(df_train[['Clump Thickness','Cell Size']] ,df_train['Type'])//使用所有训练样本训练直线的截距和斜率
print 'Testing accuracy all training samples):',lr.score(df_test[['Clump Thickness', 'Cell Size']],df_test['Type'])
intercept=lr.intercept_
coef=lr.coef_[0,:]
ly=(-intercept-lx*coef[0])/coef[1]
plt.plot(lx,ly,c='blue')
plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.show()
相关文章推荐
- 【机器学习】SVM学习(三):线性分类器的求解
- 【机器学习】--线性回归从初识到应用
- 机器学习笔记一------线性分类器
- 机器学习之线性分类器(Linear Classifiers)——肿瘤预测实例
- 林轩田机器学习基石及技法课程中线性分类器的总结
- 机器学习及实践 2.1.1.1 线性分类器
- 【机器学习】SVM学习(三):线性分类器的求解
- 机器学习-第二天-线性分类器
- 【机器学习】SVM学习(二):线性分类器
- 机器学习_线性分类器
- 机器学习笔记一二 - 线性规划 梯度下降 正规方程
- 机器学习常见的几个误区--逻辑回归的变量之间如果线性相关
- 机器学习笔记四 - 牛顿方法、指数分布族、广义线性模型、广义线性模型(多项式分布)
- 机器学习---knn分类器
- 机器学习笔记一:线性回归
- SVM入门(三)线性分类器Part 2
- SVM入门(三)线性分类器Part 2
- 高效计算基础与线性分类器
- Python机器学习——线性模型
- 小白学习机器学习---第三章:线性模型(2):对数几率回归