[machine learning] 周志华 习题3.3 编程实现对率回归(环境搭建和第一个程序)

最近开始学机器学习。看西瓜书很多东西比较懵逼,先参考网上实现环境搭建和实现以下课后练习的第一个编程题。

 

环境准备

  • mkvirtualenv -p python3 machine_learning

  • 使用的python程序库:Numpy、Scikit-learn
  • 在ubuntu中,在虚拟环境中安装:
    pip3 install Numpy
    pip3 install pandas
    pip3 install Scikit-learn
    

Numpy是一个强大的高级数学运算的工具库,还具备高效的向量和矩阵运算功能。

Scikit-learn是一个基于python的机器学习库,封装了大量经典以及最新的机器学习模型:
(1)Python语言的机器学习工具
(2)Scikit-learn包括许多知名的机器学习算法的实现
(3)Scikit-learn文档完善,容易上手,丰富的API,使其在学术界颇受欢迎。
安装scikit-learn需要Numpy,pandas等库

 

西瓜书习题3.3:编程实现对率回归,并给出西瓜数据集3.0α上的结果

自己独立编程一步步实现逻辑回归还在学习中,先调用库函数熟悉一下流程。

数据集(p89)

编号    密度    含糖率    好瓜
1    0.697    0.460    是
2    0.774    0.376    是
3    0.634    0.264    是
4    0.608    0.318    是
5    0.556    0.215    是
6    0.403    0.237    是
7    0.481    0.149    是
8    0.437    0.211    是
9    0.666    0.091    否
10    0.243    0.0267    否
11    0.245    0.057    否
12    0.343    0.099    否
13    0.639    0.161    否
14    0.657    0.198    否
15    0.36    0.37    否
16    0.593    0.042    否
17    0.719    0.103    否
 

可见x包含两个属性(密度、含糖量),y为西瓜是否好瓜分类(二分类)。把数据集转换为csv表格,并把是否的 标记转换为0、1 

这里采用sklearn逻辑回归库函数直接拟合,用sklearn.model_selection.train_test_split() 来划分训练集和测试集,用sklearn.linear_model.LogisticRegression基于训练集拟合出逻辑回归模型,然后在测试集上评估模型(得出混淆矩阵和相关度量(查准率(准确率)、查全率(召回率),F1值))。

# -*- coding: utf-8 -*

'''
data importion
'''
import numpy as np  # for matrix calculation

# load the CSV file as a numpy matrix
dataset = np.loadtxt('../data/watermelon_3a.csv', delimiter=",")

# separate the data from the target attributes
X = dataset[:,1:3] # dataset[:, m:n],取所有数据的第m到n-1列数据,即含左不含右
y = dataset[:,3]  # 取所有行的第3个数据

''' 
using sklearn lib for logistic regression
'''
from sklearn import metrics
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression

# generalization of test and train set
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.5, random_state=0)

# model training
log_model = LogisticRegression()  # using log-regression lib model
log_model.fit(X_train, y_train)  # fitting

# model validation/testing
y_pred = log_model.predict(X_test)

# summarize the fit of the model即总结模型的适用性
print(metrics.confusion_matrix(y_test, y_pred))
print(metrics.classification_report(y_test, y_pred))
  

输出:

[[4 1]
 [1 3]]
              precision    recall  f1-score   support

         0.0       0.80      0.80      0.80         5
         1.0       0.75      0.75      0.75         4

    accuracy                           0.78         9
   macro avg       0.78      0.78      0.78         9
weighted avg       0.78      0.78      0.78         9

 

你可能感兴趣的:(machine,learning)