什么是数据分析?
数据集中的样本带有标签,有明确目标
数据集中的样本没有标签,没有明确目标
智慧决策的过程,通过过程模拟和观察来不断学习、提高决策能力
下图为信贷模型完整流程示意:
信贷模型
特征:
特征的数据类型:
不同的模型能达到不同的效果,如果选择错模型,就会无用功。
基本思想:
从线性回归到逻辑回归
改变方式—引入Logistic函数
K近邻并没有学习的过程,而是在预测的时候根据数据的状况直接进行预测
优点:
缺点:
生活中有很多场景需要我们通过一系列问题的诊断结果来进行决策。
1、随机选取K个样本作为初始中心 2、重复迭代如下步骤直至收敛:
①把每个样本指派到最近的中心,形成K个簇
②重新计算每个簇的中心
③直到中心不在发生变化
优点:
缺点:
假如我们现在要借助用户手机的通信数据对用户价值进行分析,原始通信数据包括:入网时间、套餐价格、每月话费、每月流量、每月通话时长、欠费金额、欠费月数等7个特征,但它的“内在维度”可能只有3个:用户忠诚度、消费能力、欠费指数,这3个维度能够更加直观地对用户价值进行刻画
主成分分析(PCA)是一种有效的降维方法
优点:
缺点:
Sklearn是Python著名的机器学习库
除了数据处理性能上的优化,Spark还提供了多种特殊环境下的数据分析工具
Mllib提供的工具:
此案例的目标:
糖尿病的背景介绍:
数据集特征说明:
import pandas as pd
diabetes = pd.read_csv("./input/india_diabetes.csv")
# 数据查看
display(diabetes.head(10))
X=diabetes.iloc[:,:8]
Y=diabetes.iloc[:,8:9]
# 将数据集划分为训练集和测试集
# 通过控制random_state
# 可以保证每次切分的时候,得到的结果是一样的
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,Y,test_size=0.2,random_state=10,stratify=diabetes['Outcome'])
代码解释:
用训练集训练模型
from sklearn.neighbors import KNeighborsClassifier
# 生成模型
knn = KNeighborsClassifier(n_neighbors=5)
# 训练模型
knn.fit(X_train,y_train)
利用测试集测试模型:
# 测试模型
y_predict = knn.predict(X_test)
# 测试集上的预测结果
y_predict
模型性能评估
# 查看模型的正确率
from sklearn.metrics import accuracy_score
accuracy_score(y_test,y_predict)
# 74.5%的数据预测是正确的
得到的结果是:0.745
我们也可以通过混淆矩阵计算正确率
性能提成
klist = [3,5,7,9]
knn_grid = KNeighborsClassifier(n_neighbors=5)
# 搜索参数
knn_grid = GridSearchCV(knn_grid,dict(n_neighbors = klist), cv=10)
# GridSearchCV
# 训练
knn_grid.fit(X_train,y_train)
# 获取最佳
y_predict_grid = knn_grid.best_estimator_.predict(X_test)
#最优K值
knn_grid.best_params_
{'n_neighbors': 3}
#利用最优k值进行预测
y_predict_grid = knn_grid.best_estimator_.predict(X_test)
accuracy_score(y_test,y_predict_grid)
# 77.5%
结果为:0.775
以上就是一个完整的机器学习流程。
# warning
import warnings
warnings.filterwarnings('ignore')
# 数据展示方法
from IPython.display import display
# 载入pandas
import pandas as pd
# matplotlib
%matplotlib inline
# 载入数据
diabetes = pd.read_csv("./input/india_diabetes.csv")
# 数据查看
display(diabetes.head(10))
# 查看数据维度
diabetes.shape
# 统计各列键非空数据数量、数据类型
diabetes.info()
# 描述性统计
diabetes.describe()
# 查看目标特征各个类别的数量
diabetes['Outcome'].value_counts()
数据集划分
# 将目标变量和特征分离
# 特征和label的分离
X=diabetes.iloc[:,:8]
Y=diabetes.iloc[:,8:9]
# 将数据集划分为训练集和测试集
# 通过控制random_state
# 可以保证每次切分的时候,得到的结果是一样的
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,Y,test_size=0.2,random_state=10,stratify=diabetes['Outcome'])
X_train.head()
# 查看训练集中目标变量类别比例
y_train['Outcome'].value_counts()
# 查看测试集中目标变量类别比例
y_test['Outcome'].value_counts()
学习算法——knn
# 训练模型
# 载入模型
from sklearn.neighbors import KNeighborsClassifier
# 生成模型
knn = KNeighborsClassifier(n_neighbors=5)
# 训练模型
knn.fit(X_train,y_train)
# 测试模型
y_predict = knn.predict(X_test)
# 测试集上的预测结果
y_predict
# 查看模型的正确率
from sklearn.metrics import accuracy_score
accuracy_score(y_test,y_predict)
# 74.5%的数据预测是正确的
另一种办法:
from sklearn import metrics
import seaborn as sns
colorMetrics = metrics.confusion_matrix(y_test,y_predict)
sns.heatmap(colorMetrics,annot=True,fmt='d')
选取最优K值
from sklearn.model_selection import GridSearchCV
klist = [3,5,7,9]
knn_grid = KNeighborsClassifier(n_neighbors=5)
# 搜索参数
knn_grid = GridSearchCV(knn_grid,dict(n_neighbors = klist), cv=10)
# GridSearchCV
# 训练
knn_grid.fit(X_train,y_train)
# 获取最佳
y_predict_grid = knn_grid.best_estimator_.predict(X_test)
#最优K值
knn_grid.best_params_
#利用最优k值进行预测
y_predict_grid = knn_grid.best_estimator_.predict(X_test)
accuracy_score(y_test,y_predict_grid)
# 77.5%