本文为《Python机器学习及实践:从零通往Kaggle竞赛之路》一书学习笔记,欢迎与我交流数据挖掘、机器学习相关话题。
[完整代码]:
所用到的数据:百度云链接 密码:ao7w
数据集:
如下图第一列为编号 第二、第三列为描述癌细胞的两个特征,意为肿块密度、细胞大小,第四列为细胞类别(0为恶性,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个良性肿瘤,绘制测试集中正负样本分布散点图
#绘制正负样本分布散点图
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.绘制一条随机直线进行分类
#随机生成直线的参数
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条训练样本
#使用逻辑回归算法训练前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%
#绘制使用逻辑回归训练全部样本得到的分类直线
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()