机器学习步骤:(python机器学习包sklearn)
1.提出问题
2.理解数据
3.数据清洗
4.构建模型
5.评估模型
一:简单线性回归
1.数据集
from collections import OrderedDict
import pandas as pd
examDict={'学习时间':[0.5,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
'分数':[10,22,13,43,20,22,33,50,62,48,55,75,62,73,81,76,64,82,90,93]
}
examOrderDict=OrderedDict(examDict)
examDf=pd.DataFrame(examOrderDict)
examDf.head()
#提取特征features
exam_X=examDf.loc[:,'学习时间']
#提取标签label
exam_y=examDf.loc[:,'分数']
2作图看分布情况
#散点图matplotlib
import matplotlib.pyplot as plt
plt.scatter(exam_X,exam_y,color="b",label="exam data")
#添加图标
plt.xlabel("Hours")
plt.ylabel("Score")
#显示图像
plt.show()
3#建立训练集和测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(exam_X,
exam_y,
train_size= .8)
#输出特征和标签
print('原始数据特征:',exam_X.shape,
'训练集数据特征:',X_train.shape,
'测试集数据特征:',X_test.shape)
print('原始数据标签:',exam_X.shape,
'训练集数据标签:',y_train.shape,
'测试集数据标签:',y_test.shape)
print(type(X_train))
原始数据特征: (20,) 训练集数据特征: (16,) 测试集数据特征: (4,) 原始数据标签: (20,) 训练集数据标签: (16,) 测试集数据标签: (4,) <class 'pandas.core.series.Series'>
#相关系数矩阵
rDf=examDf.corr()
rDf
#将训练集特征转化为二维数组**行1列
X_train=X_train.reshape(-1,1)
#将测试集特征转化为二维数组**行1列
X_test=X_test.reshape(-1,1)
4#训练模型
from sklearn.linear_model import LinearRegression
model=LinearRegression()
model.fit(X_train,y_train)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
#最佳拟合线
a=model.intercept_
b=model.coef_
print('最佳拟合线:截距为',a,',回归系数为',b)
最佳拟合线:截距为 5.83626318433 ,回归系数为 [ 17.02461075]
5#评估模型精确度:决定系数R平方看模型拟合程度
model.score(X_test,y_test)
0.81147243948428172
二:逻辑回归LogisticRegression———分类问题
1.导入数据
#逻辑回归
#数据集
from collections import OrderedDict
import pandas as pd
examDict={'学习时间':[0.5,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
'通过考试':[0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]}
examOrderDict=OrderedDict(examDict)
examDf=pd.DataFrame(examOrderDict)
examDf.head()
2.绘制散点图
import matplotlib.pyplot as plt
plt.scatter(exam_X,exam_y,color="b",label="exam data")
plt.xlabel("Hours")
plt.ylabel("Pass")
plt.show()
3.提取特征和标签
#提取特征feature
exam_X=examDf.loc[:,'学习时间']
#提取标签labels
exam_y=examDf.loc[:,'通过考试']
4.建立训练集和测试集
from sklearn.model_selection import train_test_split
X_train,y_train,X_test,y_test=train_test_split(exam_X,
exam_y,
train_size=0.8)
#输出特征和标签
print('原始数据特征:',exam_X.shape,
'训练集数据特征:',X_train.shape,
'测试集数据特征:',X_test.shape)
print('原始数据标签:',exam_X.shape,
'训练集数据标签:',y_train.shape,
'测试集数据标签:',y_test.shape)
print(type(X_train))
原始数据特征: (20,) 训练集数据特征: (16,) 测试集数据特征: (4,)
原始数据标签: (20,) 训练集数据标签: (16,) 测试集数据标签: (4,)
<class 'pandas.core.series.Series'>
#将训练集特征转化为二维数组**行1列
X_train=X_train.reshape(-1,1)
#将测试集特征转化为二维数组**行1列
X_test=X_test.reshape(-1,1)
5.训练模型
#第一步:导入逻辑回归
from sklearn.linear_model import LogisticRegression
#创建模型
model=LogisticRegression()
#训练模型
model.fit(X_train,y_train)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
verbose=0, warm_start=False)
6.#评估模型
model.score(X_test,y_test)
0.75
7.预测通过考试的概率
(1)predict_proba函数:
#实施模型
model.predict_proba(3)
array([[ 0.33884591, 0.66115409]])
(2)predict函数:
#预测数据:使用模型的predict方法可以进行预测。这里我们输入学生的特征学习时间3小时,模型返回结果标签是1,表示预测该学生通过考试。
pred=model.predict([[3]])
print(pred)
[1]
(3)逻辑函数:
import numpy as np
a=model.intercept_
b=model.coef_
x=3
z=a+b*x
pred_Y=1/(1+np.exp(-z))
print('预测的概率值:',pred_Y)
预测的概率值: [[ 0.66115409]]
表明:学习时间为3小时,通过考试的概率为66.1%
三种数据类型:
- 数值数据(定量数据)
- 分类数据(定性数据)
- 时间序列数据(连续数据)
总结:
- 特征(features):数据的特点,标签(labels):数据的预测结果
2.训练数据和测试数据训练数据是建立机器学习模型,测试数据是验证模型的正确率
3. 分类问题:1)本质:决策面(decision surface,D.S.)
2) 评估分类算法的指标,正确率=正确分类个数/总个数
4. 逻辑回归:1)逻辑回归用于二分分类问题
2)逻辑函数(sigmoid function)
5. 逻辑回归python实现:1)建立训练集和测试集:sklearn的train_test_split
2) 逻辑回归:sklearn的LugisticRegression
6. 三种数据类型:1)数值数据
2)分类数据
3)时间序列数据
7. 分类和回归的区别
8. 机器学习算法和机器学习模型的区别:机器学习模型=机器算法+训练数据
三:机器学习算法
1. 随机森林
from sklearn.ensemble import RandomForestClassifier
model=RandomForestClassifier(n_estimators=100)
2. 支持向量机SVM
from sklearn.svm import SVC,LinearSVC
model=SVC()
3.Gradient Boosting Classifier
from sklearn.ensemble import GradientBoostingClassifier
model= GradientBoostingClassifier()
4.K_nearest neighbors
from sklearn.neighbors import KNeighborsClassifier
model=KNeighborsClassifier(n_neighbors=3)
5.Gaussian Naive Bayes
from sklearn.naive_bayes import GaussianNB
model=GaussianNB()