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

本文介绍了机器学习的基本概念,包括监督学习和无监督学习,并以良恶性肿瘤预测为例,详细阐述了如何使用线性分类器进行预测。通过Python代码展示了如何运用LogisticRegression构建线性分类模型,并分析了模型的测试准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习是指程序不断地从经历和数据中吸取经验教训从而提高应对下一次任务的能力。

因此,机器学习的三要素是任务(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()






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值