0
点赞
收藏
分享

微信扫一扫

python machine learning basis

一、相关知识

1、数据集构成:特征值+目标值

2、机器学习算法分类
监督学习
     目标值:类别–>分类问题
     目标值:连续型数据–>回归问题
无监督学习
     目标值:无

3、训练集和测试集之间的性能差异是过拟合的明显标志

——————————————————————————

二、机器学习基础流程—鸢尾花实例

初始数据--鸢尾花数据集

from sklearn.datasets import load_iris
iris_dataset = load_iris()

load_iris返回一个Bunch对象,与字典非常相似,里面包含键和值
print(iris_dataset.keys())
print(iris_dataset.values())

feature_names 键对应的值是一个字符串列表,对每一个特征进行了说明
print(iris_dataset["feature_names"])

target_names 键对应的值是一个字符串数组,里面包含我们要预测的花的品种
print(iris_dataset["target_names"])

DESCR 键对应的值是数据集的简要说明
print(iris_dataset["DESCR"])

data 里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据,格式为 NumPy 数组
print(iris_dataset["data"])

target 是对应的目标值
print(iris_dataset["target"])
训练集和测试集

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np

iris_dataset = load_iris()
scikit-learn 中的 train_test_split 打乱数据集并进行拆分。将75%的行数据及对应标签作为训练集,剩下25%的数据及其标签作为测试集
random_state 参数指定了随机数生成器的种子
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
观察数据

利用X_train中的数据创建DataFrame
利用iris_dataset.feature_names中的字符串对数据列进行标记
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
利用DataFrame创建散点图矩阵,按y_train着色
figsize:图像尺寸的大小、marker:标记形状、hist_kwds:与hist(直方图)相关的字典参数、s:点的大小、alpha:透明度、c:颜色
grr = pd.plotting.scatter_matrix(iris_dataframe, figsize=(15, 15), marker='o', hist_kwds={'bins':20}, s=40, alpha=.8, c=y_train)
k临近算法
要对一个新的数据点做出预测,算法会在训练集中寻找与这个新数据点距离最近的数据点,然后将这个数据点的标签赋值给这个新数据点。
k近邻算法考虑训练集中与新数据点最近的任意k个邻居,然后用这些邻居中数量最多的类别做出预测。
k临近算法在sklearn.neighbors的KNeighborsClassifier中

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1) 这里指定k为1

基于训练集来构建模型,需要调用knn对象的fit方法
knn.fit(X_train, y_train)
做出预测

x_new = np.array([[5, 2.9, 1, 0.2]])
print(x_new.shape)

调用predict方法进行预测
prediction = knn.predict(x_new)
print("prediction:%s\ntarget name:%s\n" % (prediction, iris_dataset['target_names'][prediction]))
评估模型

y_prediction = knn.predict(X_test)
可用平均值或knn对象的score方法求准确率
print("%.2f" % np.mean(y_test == y_prediction))
print("%.2f" % knn.score(X_test, y_test))

——————————————————————————

三、监督学习------分类、回归

1、k临近算法

k近邻分类
要对一个新的数据点做出预测,算法会在训练集中寻找与这个新数据点距离最近的数据点,然后将这个数据点的标签赋值给这个新数据点。
k近邻算法考虑训练集中与新数据点最近的任意k个邻居,然后用这些邻居中数量最多的类别做出预测。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

iris_dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_dataset.data, iris_dataset.target, random_state=0)
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
knn.score(X_test, y_test)
k邻近回归
k=1时,预测结果就是最邻近的点的目标值,k=n时就是最邻近的n个点的平均值
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor

boston_dataset = load_boston()
X_train, X_test, y_train, y_test = train_test_split(boston_dataset.data, boston_dataset.target, random_state=0)
knn = KNeighborsRegressor(n_neighbors=3)
knn.fit(X_train, y_train)
knn.predict(X_test)

knn.score(X_test, y_test)

2、线性模型

线性模型--回归
1、用于回归的线性模型。对单一特征的预测结果是一条直线,两个特征时是一个平面,或者在更高维度(即更多特征)时是一个超平面。

2、线性回归(普通最小二乘法)

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

boston_dataset = load_boston()
X_train, X_test, y_train, y_test = train_test_split(boston_dataset.data, boston_dataset.target, random_state=0)
lr = LinearRegression().fit(X_train, y_train)

lr.coef_:斜率(或权重或系数)
lr.intercept_:节距(偏移)

print(lr.score(X_train, y_train))
print(lr.score(X_test, y_test))
线性模型--分类
用于分类的线性模型:1、Logistic回归, 2、线性支持向量积(SVC)(可用于多分类问题)
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
import matplotlib.pyplot as plt

cancer=load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)

1、Logistic回归
lg = LogisticRegression()
lg.fit(X_train, y_train)
lg.score(X_test, y_test)

2、线性支持向量积
lscv = LinearSVC()
lscv.fit(X_train, y_train)
lscv.score(X_test, y_test)

3、岭回归

岭回归:预测公式与普通最小二乘法相同, 但每个特征对输出的影响应尽可能小

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge

boston_dataset = load_boston()
X_train, X_test, y_train, y_test = train_test_split(boston_dataset.data, boston_dataset.target, random_state=0)

alpha:简单性和训练集性能二者对于模型的重要程度
ridge = Ridge(alpha=1.0).fit(X_train, y_train)

print(ridge.score(X_train, y_train))
print(ridge.score(X_test, y_test))

4、朴素贝叶斯分类器

朴素贝叶斯分类器:基于贝叶斯公式的分类算法
scikit-learn 中实现了三种朴素贝叶斯分类器:GaussianNB、BernoulliNB MultinomialNB。
GaussianNB 可应用于任意连续数据、BernoulliNB假定输入数据为二分类数据、
MultinomialNB 假定输入数据为计数数据

5、决策树

分类决策树:通过一系列的if/else分支,从根节点向下一步一步划分,最终形成了一个树形的分支结构
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)

tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)
print(tree.score(X_train, y_train))
print(tree.score(X_test, y_test))

由于未剪枝的树容易出现过拟合的现象,所以可以设置max_depth=4最多连续问4个问题
tree = DecisionTreeClassifier(max_depth=4, random_state=0)
tree.fit(X_train, y_train)
print(tree.score(X_train, y_train))
print(tree.score(X_test, y_test))
回归决策树
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np


lt = {"a": np.arange(-10, 10, 0.5), "b": np.arange(-20, 20, 1)}
X = pd.DataFrame(lt)
Y = np.array(np.sin(X.a) + np.sin(X.b))
X_train, X_test, y_train, y_test = train_test_split(X, Y, random_state=0)

tree = DecisionTreeRegressor().fit(X_train, y_train)
print(tree.score(X_test, y_test))

——————————————————————————

四、无监督学习

无监督学习是利用无标签的数据学习数据的分布或数据与数据之间的关系。
无监督学习最常应用的场景是聚类降维
无监督学习算法的评估就是人工检查,通常用来作为监督算法的一个预处理步骤

1、聚类
(1)k均值聚类

k均值聚类
算法交替执行以下两个步骤:将每个数据点分配给最近的簇中心,
然后将每个簇中心设置为所分配的所有数据点的平均值。如果簇的分配不再发生变化,那么算法结束。

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
X, y = make_blobs(random_state=1)

构建聚类模型, cluster为簇的个数
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)

kmeans.predict(X)

(2)凝聚聚类

凝聚聚类:首先声明每个点是自己的簇,然后合并两个最相似的簇,直到满足某种停止准则为止。
from sklearn.datasets import make_blobs
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt

X, y = make_blobs(random_state=1)
color = ["red", "blue", "green"]
agg = AgglomerativeClustering(n_clusters=3)
assigment = agg.fit_predict(X)
for i in range(len(X)):
a = X[i, 0]
b = X[i, 1]
s = assigment[i]
plt.scatter(a, b, s=20, c=color[s])
plt.legend(color)
plt.show()

2、降维
主成分分析

主成分分析(pca)是最常用的一种降维方法,通常用于高维数据集的探索与可视化,还可以用作数据压缩和预处理等。
pca可以把具有相关性的高维变量合成为线性无关的低维变量,成为主成分。主成分能够尽可能保留原始数据的信息

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris

dataset = load_iris()
X = dataset.data
y = dataset.target

pca = PCA(n_components=2) 降维后主成分数目为2
reduced_X = pca.fit_transform(X) 对原始数据降维,保存在reduce_X中

red_x, red_y = [], []
blue_x, blue_y = [], []
green_x, green_y = [], []

for i in range(len(reduced_X)):
if y[i] == 0:
red_x.append(reduced_X[i][0])
red_y.append(reduced_X[i][1])
elif y[i] == 1:
blue_x.append(reduced_X[i][0])
blue_y.append(reduced_X[i][1])
else:
green_x.append(reduced_X[i][0])
green_y.append(reduced_X[i][1])

plt.scatter(red_x, red_y, c='r', marker='x')
plt.scatter(blue_x, blue_y, c='b', marker='D')
plt.scatter(green_x, green_y, c='g', marker='.')
plt.show()


举报

相关推荐

0 条评论