您的位置:首页 > 其它

初识机器学习和线性分类器

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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: