学习方法
- 不要死啃书,看不懂就先放弃,回过头再来看
- 去网上找相关章节的文章,归类查看并做好笔记
- 不要想着了解每个函数、参数的作用,不会不了解就去查资料即可,先上手跑起来
1、机器学习算法的整体使用步骤如下:
(1)从scikitlearn库中调用相应的机器学习算法模块; (2)输入相应的算法参数定义一个新的算法; (3)输入基础训练数据集利用scaler对其进行数据归一化处理
(4)对于归一化的数据集进行机器学习算法的训练fit过程; (5)输入测试数据集对其结果进行预测predict; (6)将预测结果与真实结果进行对比,输出其算法的准确率score(或者混淆矩阵)
专业英语
feature 特征值(除标签列以外的每一列)
target 标签/结果(一般为最后一列)
coef_ 权重系数(斜率)
intercept_ 截距
1.线性回归
regression 回归
metrics 度量(用于评估)
accuracy_score 准确率
sklearn api
官方 train_test_split
https://www.cnblogs.com/Yanjy-OnlyOne/p/11288098.html
import numpy as np
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=10)
sklearn 技巧
数据
1.问题: 使用sklearn建立模型之后进行预测时出现:Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
2.原因:这是由于在新版的sklearn中,所有的数据都应该是二维矩阵。
3.解决办法:如果传入的是一个一维矩阵,直接使用.reshape(-1,1)转化为二维矩阵,如果只是一个样本数据,需要先使用numpy转化为一个一维数组,再使用reshape转化为二维数组。
常用函数 fit(),predict()
方法一:reshape
x=[1]
np.array(x).reshape(-1,1)
x=[[1],[2]]
np.array(x)
'''
array([[1],
[2]])
'''
方法二:np.newaxis np.newaxis作用 对于[: , np.newaxis] 和 [np.newaxis,:],是在np.newaxis这里增加1维。 这样改变维度的作用往往是将一维的数据转变成一个矩阵
a=np.array([1,2,3,4,5])
aa=a[:,np.newaxis]
print(aa.shape)
print(aa)
输出:(5, 1)
[[1]
[2]
[3]
[4]
[5]]
Expected 2D array, got 1D array instead:
是因为在最新版本的sklearn中,所有的数据都应该是二维矩阵,哪怕它只是单独一行或一列。
解决:添加.reshape(-1,1)即可
model.fit(x_train.reshape(-1,1),y_train)
Expected 2D array, got scalar array instead…Reshape your data…
predict(21.079) =>
新版本
predict([[21.079]])
读取
numpy 读取
data = np.genfromtxt("job.csv", delimiter=",")
x_data = data[1:,1]
type(x_data)
x_data
pandas 读取
data=pd.read_csv('input_data.csv')
x=data['square_feet']
y=data['price']
type(x)
y
'''
0 6450
1 7450
2 8450
3 9450
4 11450
5 15450
6 18450
Name: price, dtype: int64
'''
np.array(x)
数据归一化
概念
1、数据集 dataset 2、每一行的数据叫做样本数据 3、除最后一列标签列外,每一列的数据叫特征或属性 4、最后一列叫做标签列,样本所属类别
5、属性(特征)空间:由特征张成的空间 6、特征向量:构成特征空间的每一行的特征数据 特征向量(features/feature vector):属性的集合,通常用一个向量表示,附属于一个实例。每一个样例都有自己不同的属性,不同的属性用不同的属性值代表,多个属性值组合在一起就可以用一个向量来表示。这个向量就称之为特征向量。
线性模型
机器学习实战——线性回归模型
简单线性回归
咖啡店 https://www.bilibili.com/video/BV1sJ411z7zJ
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data=np.array([
['商场ID','日均人流量(千人)','日均销售收入(千元)'],
[1,2,12],[2,5,31],[3,8,45],[4,8,52],[5,13,79],
[6,15,85],[7,17,115],[8,19,119],[9,21,135],[10,24,145]
])
x=data[1:, 1]
y=data[1:, 2]
plt.scatter(x,y)
plt.show()
from sklearn.linear_model import LinearRegression
features= data[1:,1].reshape(-1,1)
target=data[1:,2]
regression=LinearRegression()
model= regression.fit(features, target)
model.intercept_
model.coef_
model.predict([[10]])
逻辑回归
回归模型的输出是连续的 分类模型的输出时离散的
决策树
官方入门 https://scikit-learn.org/stable/modules/tree.html#tree
机器学习实战(三)——决策树
理论+ 代码实例
神经网络
支持向量机SVM
SVM分类器原来这么简单
2021.10.26 笔记:
SVM本质模型是特征空间中最大化间隔的线性分类器,是一种二分类模型。
之所以叫支持向量机,因为其核心理念是:支持向量样本会对识别的问题起关键性作用。那什么是支持向量(Support vector)呢?支持向量 也就是离分类超平面(Hyper plane)最近的样本点 。
简单地说,作为支持向量的样本点非常非常重要,以至于其他的样本点可以视而不见。
所谓间隔最大化,说的是分类超平面跟两类数据的间隔要尽可能大(即远离两边数据),对于分类超平面来说,也就是要位于两类数据的正中间,不偏向任何一类,才能保证离两边数据都尽可能远,从而实现间隔最大化。
存在有多个可行的线性分类器能将两类样本分类。SVM的最终目标是:以间隔最大化为原则找到最合适的那个分类器。
如何处理线性不可分? SVM的解决办法就是先将数据变成线性可分的,再构造出最优分类超平面。
SVM 通过选择一个核函数K ,将低维非线性数据映射到高维空间中。原始空间中的非线性数据经过核函数映射转换后,在高维空间中变成线性可分的数据,从而可以构造出最优分类超平面。
核函数(Kernel Function)是计算两个向量在隐式映射后空间中的内积的函数。核函数通过先对特征向量做内积,然后用函数 K 进行变换,这有利于避开直接在高维空间中计算,大大简化问题求解。并且这等价于先对向量做核映射然后再做内积。
SVM求解算法知多少? 看文章
机器学习笔记之(5)——SVM分类器
代码实例 将cross_validation换成model_selection
集成学习
参考:sklearn中调用集成学习算法 ***
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
x, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=42)
plt.figure()
'''
参数c就是color,赋值为可迭代参数对象,长度与x,y相同,根据值的不同使得(x,y)参数对表现为不同的颜色。简单地说,按x,y值其中某一个值来区分颜色就好,
比如上边想按照y值来区分,所以直接c=y就可以了,
又比如画三维图像时,按照z值区分,直接将c=z就好了
'''
plt.scatter(x[:, 0], x[:, 1], c=y)
plt.show()
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=42)
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(x_train, y_train)
print(log_reg.score(x_test, y_test))
from sklearn.svm import SVC
svc_reg = SVC()
svc_reg.fit(x_train, y_train)
print(svc_reg.score(x_test, y_test))
from sklearn.neighbors import KNeighborsClassifier
knn_reg = KNeighborsClassifier(n_neighbors=3)
knn_reg.fit(x_train, y_train)
print(knn_reg.score(x_test, y_test))
from sklearn.tree import DecisionTreeClassifier
tree_reg = DecisionTreeClassifier()
tree_reg.fit(x_train, y_train)
print(tree_reg.score(x_test, y_test))
from sklearn.metrics import accuracy_score
y_predict1 = log_reg.predict(x_test)
y_predict2 = knn_reg.predict(x_test)
y_predict3 = tree_reg.predict(x_test)
y_predict = np.array(y_predict1 + y_predict2 + y_predict3 >= 3, dtype="int")
print(accuracy_score(y_predict, y_test))
from sklearn.ensemble import VotingClassifier
vote_reg = VotingClassifier(estimators=[
("log_cla", LogisticRegression()),
("svm_cla",SVC()),
("knn", KNeighborsClassifier()),
("tree", DecisionTreeClassifier(random_state=666))
], voting="hard")
vote_reg.fit(x_train, y_train)
print(vote_reg.score(x_test, y_test))
from sklearn.ensemble import VotingClassifier
vote_reg1 = VotingClassifier(estimators=[
("log_cla", LogisticRegression()),
("svm_cla",SVC(probability=True)),
("knn", KNeighborsClassifier()),
("tree", DecisionTreeClassifier(random_state=666))
], voting="soft")
vote_reg1.fit(x_train, y_train)
print(vote_reg1.score(x_test, y_test))
结果:
逻辑回归 0.864
SVM 0.896
KNN 0.896
决策树 0.864
自定义 0.824
hard voting 0.896
soft voting 0.92
|