利用sklearn进行分类:良/恶性乳腺癌肿瘤预测(一)

本文为《Python机器学习及实践:从零通往Kaggle竞赛之路》一书学习笔记,欢迎与我交流数据挖掘、机器学习相关话题。

[完整代码]:
所用到的数据:百度云链接 密码:ao7w

数据集:

如下图第一列为编号 第二、第三列为描述癌细胞的两个特征,意为肿块密度、细胞大小,第四列为细胞类别(0为恶性,1为良性)


利用sklearn进行分类:良/恶性乳腺癌肿瘤预测(一)_第1张图片
数据集样式

数据集中训练集一共有524条样本,测试集一共有175条样本,一般记良性肿瘤样本为正样本,恶性肿瘤样本为负样本。

#读取数据
train = pd.read_csv('../Datasets/Breast-Cancer/breast-cancer-train.csv')
test = pd.read_csv('../Datasets/Breast-Cancer/breast-cancer-test.csv')

#构建测试集训练特征
test_positive = test.loc[test['Type'] == 1][['Clump Thickness','Cell Size']] #负样本训练特征
test_negative = test.loc[test['Type'] == 0][['Clump Thickness','Cell Size']] #正样本训练特征

其中测试集样本中有118个恶性肿瘤,57个良性肿瘤,绘制测试集中正负样本分布散点图


利用sklearn进行分类:良/恶性乳腺癌肿瘤预测(一)_第2张图片
测试集数据分布
#绘制正负样本分布散点图
plt.scatter(test_negative['Clump Thickness'],test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(test_positive['Clump Thickness'],test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.show()
1.绘制一条随机直线进行分类
利用sklearn进行分类:良/恶性乳腺癌肿瘤预测(一)_第3张图片
随机参数下的直线分类器
#随机生成直线的参数
intercept = np.random.random([1])
coef = np.random.random([2])
lx = np.arange(0,12) #x轴
ly = (-intercept -lx * coef[0])/coef[1] #y轴 直线方程ax+by+c=0
#绘制一条随机直线进行区分
plt.scatter(test_negative['Clump Thickness'],test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(test_positive['Clump Thickness'],test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')                        
plt.plot(lx,ly,c='yellow')
plt.show()
2.使用逻辑回归算法训练前10条训练样本
利用sklearn进行分类:良/恶性乳腺癌肿瘤预测(一)_第4张图片
使用前10条训练样本得到的分类直线
#使用逻辑回归算法训练前10条训练样本
from sklearn.linear_model import LogisticRegression
model = LogisticRegression() #生成模型
model.fit(train[['Clump Thickness','Cell Size']][:10],train['Type'][:10]) #训练模型
print model.score(test[['Clump Thickness','Cell Size']],test['Type']) #预测并评价

#绘制使用逻辑回归训练前10条样本得到的分类直线 正确率约为87%
#直线参数由算法生成
intercept = model.intercept_
coef = model.coef_[0,:]
lx = np.arange(0,12) #x轴
ly = (-intercept -lx * coef[0])/coef[1] 

plt.scatter(test_negative['Clump Thickness'],test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(test_positive['Clump Thickness'],test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size') 
plt.plot(lx,ly,c='green')
plt.show()
3.使用逻辑回归算法训练所有训练样本 正确率约为94%
利用sklearn进行分类:良/恶性乳腺癌肿瘤预测(一)_第5张图片
使用所有训练样本得到的分类直线
#绘制使用逻辑回归训练全部样本得到的分类直线
model = LogisticRegression()
model.fit(train[['Clump Thickness','Cell Size']],train['Type'])
print model.score(test[['Clump Thickness','Cell Size']],test['Type'])
intercept = model.intercept_
coef = model.coef_[0,:]
lx = np.arange(0,12) #x轴
ly = (-intercept -lx * coef[0])/coef[1]

plt.scatter(test_negative['Clump Thickness'],test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(test_positive['Clump Thickness'],test_positive['Cell Size'],marker='x',s=150,c='black')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size') 
plt.plot(lx,ly,c='blue')   
plt.show() 

你可能感兴趣的:(利用sklearn进行分类:良/恶性乳腺癌肿瘤预测(一))