这是一篇小白学习机器学习这门课程的笔记记录,如果有误请大家批评指正~
文章目录
- 一、机器学习基础
- 机器学习应该做什么
- 机器学习的种类
- 机器学习框架
- 机器学习步骤
- 相关概念
- 二、机器学习的步骤
- 三、有监督学习的实现方法
- 四、无监督学习的实现方法
一、机器学习基础介绍
1.机器学习应该做什么
机器学习是指计算机根据给定的问题、课题或环境进行学习,并利用学习结果解决问题或课题等的一整套机制。
机器学习一直要思考的问题:
我要完成的是哪类型的任务/问题/课题?
用什么数据来支撑我的学习?
用什么方法/模型解决问题?
用什么来衡量我的效果?
例如:
我要考什么试(英语四级)
我要学习什么资料(背单词)
我的学习方法(用某某老师的学习方法)
我的测试方法(考试)
2.机器学习的种类
1.有监督学习:将问题的答案告诉计算机,使计算机进行学习并给出机器学习模型的方法。(这种方法要求数据中包含表示特征的数据和作为答案的目标数据)数据有输入对应输出。理解为背答案学习。
有监督学习包含分类和回归。
2.无监督学习:没有作为答案的目标变量。将表示特征的数据作为输入,通过将数据变形为其他形式或者找出数据中的部分集合,来理解输入数据的构造。数据没有输入只有输出。理解为没有答案一直做题找规律。
无监督学习包含降维和聚类。
3.强化学习:以某个环境下行动的智能体获得的奖励最大化为目标而进行学习的方法。也是半监督学习。
3.机器学习框架
- 任务
- 数据
- 评估
- 方法 / 模型
4.相关概念
【任务】:任务包括分类(二分类、多分类)问题、回归问题、聚类问题、降维问题等。从另外一个角度看,任务包括有监督学习、无监督学习、半监督学习(强化学习)等。
【数据】:什么是特征变量/属性/特征值(输入)、结果/预测(输出)、目标变量/标签?什么是训练集、测试集、验证集?
【方法】:什么是模型?什么是参数、超参数?
【指标】:什么是过拟合、欠拟合?什么是偏差、方差、Loss?
【分类问题】
【二元分类】
【多元分类】
【回归问题】
【特征值/特征变量(feature)】用于预测的原始数据
【目标值/目标变量(target)】预测对象的数据
【拟合、过拟合、欠拟合】
【偏差、方差】
二、机器学习的步骤
1.建立模型(入学)
2.训练模型(学习)
3.预测结果(考试)
4.评估结果(评分出成绩)
三、有监督学习的实现方法
# 有监督学习(分类)的例子
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancers = load_breast_cancer()
#dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
print(cancers.keys())
X = cancers.data #获取特征值
Y = cancers.target #获取标签
print(X.shape) #查看特征形状
print(Y.shape) #查看标签形状
print(X)
print(Y)
print(cancers.DESCR) #查看数据集描述
print('特征名称')
print(cancers.feature_names) # 特征名
print('分类名称')
print(cancers.target_names) # 标签类别名
X = cancers.data
y = cancers.target
X = X[:, :10] # 注意,X是什么数据类型?
X[:5]
X_df = pd.DataFrame(cancers.data, columns=cancers.feature_names)
X_df.head(5)
X_df = X_df.iloc[:, :10] # 注意,X_df是什么数据类型?
- 建立模型(入学)
from sklearn.linear_model import LogisticRegression model = LogisticRegression()
- 训练模型(学习)
model.fit(X, y) # 特征值x ,学习题目 # 目标变量y
- 预测结果(考试)
“考试”试题与“学习”内容一致,反映不出真正的学习效果,常用于初步的训练尝试
“考试成绩虚高”称之为过拟合
y_pred = model.predict(x) # 考试题目x # 与上面x不同
- 评估结果(评分出成绩) 注意:正确率高,结果未必是好。
from sklearn.metrics import accuracy_score accuracy_score(y, y_pred)
四、无监督学习的实现方法
# 无监督学习(聚类)的例子
from sklearn.datasets import load_wine
wine = load_wine()
X = wine.data
y = wine.target
# 看看数据长得怎么样,对应表1-7
Xpd = pd.DataFrame(X, columns=wine.feature_names)
Xpd.head()
X = X[:, [0, 9]]
# 看看数据长得怎么样,对应表1-8
Xpd = Xpd.iloc[:, [0,9]]
Xpd.head()
1.建立模型
from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
2.将训练和预测做在一起了
pred = model.fit_predict(X)
3.查看结果
import matplotlib.pyplot as plt
# 筛选出pred==0的分类,将0号特征作为横坐标,1号特征作为纵坐标,用红色方块绘制。
plt.scatter(X[pred==0, 0], X[pred==0, 1], color='red', marker='s', label='Label1')
# 筛选出pred==1的分类,将0号特征作为横坐标,1号特征作为纵坐标,用蓝色方块绘制。
plt.scatter(X[pred==1, 0], X[pred==1, 1], color='blue', marker='s', label='Label2')
# 筛选出pred==2的分类,将0号特征作为横坐标,1号特征作为纵坐标,用绿色方块绘制。
plt.scatter(X[pred==2, 0], X[pred==2, 1], color='green', marker='s', label='Label3')
# 获取聚类中心(model.cluster_centers_),将0号特征作为横坐标,1号特征作为纵坐标,用黄色星星绘制。
plt.scatter(model.cluster_centers_[:, 0], model.cluster_centers_[:, 1], s=200, color='yellow', marker="*", label="center")
# 绘制示例(legend)
plt.legend()
plt.show()