机器学习之数据分析常用方法

简介: 机器学习之数据分析常用方法

数据分析常用


1.单项类别统计

data["列属性"].value_counts(normalize=True)
normalize=True:
dtype: int64
N    0.753
Y    0.247
normalize=False:
Name: fraud_reported, dtype: float64
NY    262
SC    248

2.多项类别统计

data.unique()

3.设置行|列最大

pd.set_option('display.max_columns',500) 列
pd.set_option('display.max_rows',500)  行

4.根据一个属性统计另一个属性(不区分类别)画柱形图

ax = data.groupby('属性a').属性b.count().plot.bar(ylim=0)

5.根据一个属性统计另一个属性(区分类别)画柱形图

table =pd.crosstab(data.age,data.fraud_reported)  (行,列)
table.div(table.sum(1).astype(float),axis=0).plot(kind='bar',stacked=True)  因为列属性有两个类,所以使其总和为1显示

6.单属性画柱形图

ax = sns.countplot(x='属性',data=s)

7.画饼图

ax = (data['属性'].value_counts()*100.0/len(data)).plot.pie(autopct='%.1f%%',labels=['Male','Female'],fontsize=12)
#pie:表示饼图
#autopct:表示格式
#%.1f%%:第一个表示格式,.1f表示一位小数,%%表示百分号

8.inplace=True


true:直接在源数据上进行修改


false:创建新对象,然后覆盖


9.分箱操作

pd.cut(data.被划分的数据, bins, labels=names).astype(object)
bins:区间
lable:区间对应的标签

10.对多标签进行编码

数字编码:
1.LabelEncoder
from sklearn.preprocessing import LabelEncoder
x['标签后'] = LabelEncoder().fit_transform(dummies['标签前'])
2.map
class_dict = {
    'A': 1,
    'B': 2,
    'C': 3,
    'D': 4,
    'E': 5,
    'F': 6,
    'G': 7,
}
train_data['class'] = train_data['class'].map(class_dict)

11.数据标准化

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler(with_mean=False)
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
StandardScaler:计算均值和方差
fit_transform:训练数据用的
transform:测试数据用的

12.随机森林(等算法)进行交叉验证

#随机森林
rfc = RandomForestClassifier(n_estimators=200)
#数据划分K折
kfold = KFold(n_splits=5, shuffle=True,random_state=7)
#交叉验证
result2 = cross_val_score(rfc, x_train_scaled, y_train, cv=kfold, scoring='accuracy')
#xgboot
xgb = XGBClassifier()
#逻辑回归
logreg= LogisticRegressionCV(solver='lbfgs', cv=cv)
#KNN
knn = KNeighborsClassifier(5)
#SVC
svcl = SVC()
#ADAboost
adb = AdaBoostClassifier()
#决策树
dt = DecisionTreeClassifier(max_depth=5)
#随机森林
rf = RandomForestClassifier()
#LDA 线性判别
lda = LinearDiscriminantAnalysis()
#
gnb = GaussianNB()

13.逻辑回归算法


正则化选择参数:penalty


  • L1:预测效果差、模型特征多,需要让一些不重要的特征系数归零,从而让模型稀疏化
    solver只能选择liblinear,因为l1正则化损失函数不是连续可导的,而其他三种都是需要二阶导数

  • L2:解决过拟合
    solver四种皆可


优化算法选择参数:solver


  • liblinear:坐标轴下降法

  • lbfgs:二阶导数

  • newton-cg:二阶导数

  • sag:随机梯度下降

分类方式选择参数:multi_class


ovr
mvm
二元 相同 相同
多元 略差,速度快 精确,速度慢
solver 四种皆可 除了liblinear皆可

类型权重参数:class_weight


默认:不考虑权重


balance:根据数据量自动分配,样本量越多,权重越低


自定义权重比例:{0:0.9,1:0.1}


样本权重参数:sample_weight


在调用fit函数时使用


若class__weight 和 sample_weight都使用,权重就是


class__weight *sample_weight


正则化参数:C

C=[0.01,0.1,1,10,100]
从中选出最好的

列子

from sklearn import linear_model
logistic = linear_model.LogisticRegression()  
#如果用正则化,可以添加参数penalty,可以是l1正则化(可以更有效的抵抗共线性),也可以是l2正则化,如果是类别不均衡的数据集,可以添加class_weight参数,这个可以自己设置,也可以让模型自己计算
logistic = linear_model.LogisticRegression( penalty='l1', class_weight='balanced')
logistic.fit(X_train,y_train)
y_pred = logistic.predict( X_test)
#如果只想预测概率大小,可以用下面这个函数
y_pred = logistic.predict_proba(X_test)

14.AdaBoostClassifier


基分类器:base_estimator


默认是决策树


若为其他,则要指定样本权重


迭代次数:n_estimator


默认50次


学习率:learning_rate


默认1


模型提升准则:algorithm


samme:样本集预测错误的概率进行划分


samme.r:(默认)样本集预测错误的比例进行划分


随机种子:random_state


15.Xgboost

params = {
'booster': 'gbtree', 
'objective': 'multi:softmax', # 多分类的问题 
'num_class': 10, # 类别数,与 multisoftmax 并用 
'gamma': 0.1, # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2这样子。 
'max_depth': 12, # 构建树的深度,越大越容易过拟合 
'reg_lambda': 2, # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。 
'subsample': 0.7, # 随机采样训练样本 
'colsample_bytree': 0.7, # 生成树时进行的列采样 
'min_child_weight': 3, 
'silent': 1, # 设置成1则没有运行信息输出,最好是设置为0. 
'learning_rate': 0.007, # 如同学习率 
'reg_alpha':0, # L1 正则项参数
'seed': 1000, 
'nthread': 4, # cpu 线程数 
}

16.KNN


n_neighbors : int,optional(default = 5)

默认情况下kneighbors查询使用的邻居数。就是k-NN的k的值,选取最近的k个点。


weights : str或callable,可选(默认=‘uniform’)

默认是uniform,参数可以是uniform、distance,也可以是用户自己定义的函数。uniform是均等的权重,就说所有的邻近点的权重都是相等的。distance是不均等的权重,距离近的点比距离远的点的影响大。用户自定义的函数,接收距离的数组,返回一组维数相同的权重。


algorithm : {‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选

快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索,brute是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时。kd_tree,构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。ball

tree是为了克服kd树高纬失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。


leaf_size : int,optional(默认值= 30)

默认是30,这个是构造的kd树和ball树的大小。这个值的设置会影响树构建的速度和搜索速度,同样也影响着存储树所需的内存大小。需要根据问题的性质选择最优的大小。


p : 整数,可选(默认= 2)

距离度量公式。在上小结,我们使用欧氏距离公式进行距离度量。除此之外,还有其他的度量方法,例如曼哈顿距离。这个参数默认为2,也就是默认使用欧式距离公式进行距离度量。也可以设置为1,使用曼哈顿距离公式进行距离度量。


metric : 字符串或可调用,默认为’minkowski’

用于距离度量,默认度量是minkowski,也就是p=2的欧氏距离(欧几里德度量)。


metric_params : dict,optional(默认=None)

距离公式的其他关键参数,这个可以不管,使用默认的None即可。


n_jobs : int或None,可选(默认=None)

并行处理设置。默认为1,临近点搜索并行工作数。如果为-1,那么CPU的所有cores都用于并行工作。


17.特征筛选

from sklearn.feature_selection import SelectFromModel
from numpy import sort
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score
#搭建模型并训练
xgb = XGBClassifier()
xgb.fit(x_train_scaled,y_train)
xgb_pred = xgb.predict(X_test_scaled)
predictions = [round(value) for value in xgb_pred]
accuracy = accuracy_score(xgb_pred,y_test)
print("Accuracy: %.2f%%"%(accuracy*100.0))
#获取特征重要程度排行值
thresholds = sort(xgb.feature_importances_)
#根据排行值进行特征的选择
for threshold in thresholds:
    selected = SelectFromModel(xgb,threshold=threshold,prefit=True)
    selected_x_train = selected.transform(x_train_scaled)
    selected_model = XGBClassifier()
    selected_model.fit(selected_x_train,y_train)
    selected_x_test = selected.transform(X_test_scaled)
    selected_predict = selected_model.predict(selected_x_test)
    selected_predictions = [round(values) for values in selected_predict]
    selected_accuracy = accuracy_score(y_test,selected_predict)
    print("Thresholds: %.3f,n=%d,Accuracy: %.2f%%"%(threshold,selected_x_train.shape[1],selected_accuracy*100.0))
画图查看重要程度
from xgboost import XGBClassifier,plot_importance
xgb = XGBClassifier()
xgb.fit(x_train_scaled,y_train)
plt.rcParams['figure.figsize']=[25,20]
plot_importance(xgb)
plt.show()

18.查看当前模型参数

from pprint import pprint
pprint(xgb.get_params())

19.网格搜索GridSearchCV()

1.estimator
选择使用的分类器,并且传入除需要确定最佳的参数之外的其他参数。
每一个分类器都需要一个scoring参数,或者score方法:
如estimator=RandomForestClassifier(
min_samples_split=100,
min_samples_leaf=20,
max_depth=8,
max_features=‘sqrt’,
random_state=10),
2.param_grid
需要最优化的参数的取值,值为字典或者列表,例如:
param_grid =param_test1,
param_test1 = {‘n_estimators’:range(10,71,10)}。
scoring=None
模型评价标准,默认None,这时需要使用score函数;或者如scoring=‘roc_auc’,
根据所选模型不同,评价准则不同。字符串(函数名),或是可调用对象,
需要其函数签名形如:scorer(estimator, X, y);如果是None,则使用estimator的误差估计函数。
4.n_jobs=1
n_jobs: 并行数,int:个数,-1:跟CPU核数一致, 1:默认值
5.cv=None
交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield产生训练/测试数据的生成器。
6.verbose=0, scoring=None
verbose:日志冗长度,int:冗长度,0:不输出训练过程,1:偶尔输出,>1:对每个子模型都输出。
7.pre_dispatch=‘2*n_jobs’
指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这可能导致OOM,
而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次
8.return_train_score=’warn’
如果“False”,cv_results_属性将不包括训练分数。
9.refit :默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可用的训练集与开发集进行,
作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。
10.iid:默认True,为True时,默认为各个样本fold概率分布一致,误差估计为所有样本之和,而非各个fold的平均。


目录
相关文章
|
12天前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
|
14天前
|
机器学习/深度学习 算法 Python
【机器学习】面试问答:决策树如何进行剪枝?剪枝的方法有哪些?
文章讨论了决策树的剪枝技术,包括预剪枝和后剪枝的概念、方法以及各自的优缺点。
29 2
|
14天前
|
机器学习/深度学习
【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
长短时记忆网络(LSTM)的基本概念、解决梯度消失问题的机制,以及介绍了包括梯度裁剪、改变激活函数、残差结构和Batch Normalization在内的其他方法来解决梯度消失或梯度爆炸问题。
27 2
|
14天前
|
机器学习/深度学习
|
22天前
|
机器学习/深度学习 人工智能 TensorFlow
🔥零基础逆袭!Python数据分析+机器学习:TensorFlow带你秒变AI大师
【7月更文挑战第29天】在这个数据驱动的时代,掌握Python与机器学习技能是进入AI领域的关键。即使从零开始,也能通过TensorFlow成为AI专家。
42 8
|
20天前
|
机器学习/深度学习 自然语言处理 数据挖掘
机器学习不再是梦!PyTorch助你轻松驾驭复杂数据分析场景
【7月更文挑战第31天】机器学习已深深嵌入日常生活,从智能推荐到自动驾驶皆为其应用。PyTorch作为一个开源库,凭借简洁API、动态计算图及GPU加速能力,降低了学习门槛并提高了开发效率。通过一个使用PyTorch构建简单CNN识别MNIST手写数字的例子,展现了如何快速搭建神经网络。随着技能提升,开发者能运用PyTorch及其丰富的生态系统(如torchvision、torchtext和torchaudio)应对复杂场景,如自然语言处理和强化学习。掌握PyTorch,意味着掌握了数据时代的关键技能。
10 1
|
3天前
|
机器学习/深度学习 搜索推荐 数据挖掘
【深度解析】超越RMSE和MSE:揭秘更多机器学习模型性能指标,助你成为数据分析高手!
【8月更文挑战第17天】本文探讨机器学习模型评估中的关键性能指标。从均方误差(MSE)和均方根误差(RMSE)入手,这两种指标对较大预测偏差敏感,适用于回归任务。通过示例代码展示如何计算这些指标及其它如平均绝对误差(MAE)和决定系数(R²)。此外,文章还介绍了分类任务中的准确率、精确率、召回率和F1分数,并通过实例说明这些指标的计算方法。最后,强调根据应用场景选择合适的性能指标的重要性。
10 0
|
24天前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【7月更文挑战第27天】在数据科学领域, Scikit-learn因高效易用成为首选工具。本文采用实战方式教授Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优。首先需安装Scikit-learn (`pip install scikit-learn`) 并加载数据集(如Iris)。
24 0
|
24天前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
【7月更文挑战第27天】在数据驱动时代,Python以丰富的库成为数据科学首选。Scikit-learn因简洁高效而备受青睐,引领数据分析革命。本文引导您使用Scikit-learn简化机器学习流程。首先通过`pip install scikit-learn`安装库。接着使用内置数据集简化数据准备步骤,例如加载Iris数据集。选择合适的模型,如逻辑回归,并初始化与训练模型。利用交叉验证评估模型性能,获取准确率等指标。最后,应用训练好的模型进行新数据预测。Scikit-learn为各阶段提供一站式支持,助力数据分析项目成功。
28 0
|
14天前
|
机器学习/深度学习 存储 人工智能
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
本文是关于2022-2023年知能科技公司机器学习算法工程师岗位的秋招笔试题,包括简答题和编程题,简答题涉及神经网络防止过拟合的方法、ReLU激活函数的使用原因以及条件概率计算,编程题包括路径行走时间计算和两车相向而行相遇时间问题。
40 2
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题