机器学习实验报告——模型评估

实验名称:模型评估

实验目的:

1. 学习数据集的生成和划分方法。

2. 掌握交叉验证和自助法的基本概念和实现。

3. 学习使用逻辑回归模型进行分类、预测及评估。

4. 使用评估指标(如精确率、召回率、准确率)对模型进行评估。

5. 通过数据可视化展示模型的分类效果。

实验步骤与要求:

1. 数据集生成与划分

2. 交叉验证

3. 自助法

4. 模型训练与预测

5. 模型评估

6. 数据可视化

 

一、实验目的

(例如:你认为这个实验可以应用到的现实场景,为什么可以应用?)

(1)市场调研:

可以使用该代码生成模拟数据集,将数据集划分为训练集和测试集,并使用交叉验证法评估不同模型的性能,从而帮助市场研究人员了解消费者行为、市场趋势以及产品销售情况。

(2)市场推广:

可以利用该代码生成自助样本,用于模型训练和集成学习,从而帮助市场营销团队制定个性化的广告策略、推广方案和产品定价等。

(3)客户分类与预测:

通过使用Logistic Regression进行线性分类,可以根据客户的特征(如购买历史、年龄、性别等)对客户进行分类,并预测客户的行为,如购买概率、流失风险等,从而帮助企业精确营销和客户关系管理。

(4)销售预测与需求预测:

通过使用模型评估指标(如准确率、精确率、召回率等)对销售数据进行分析,可以预测产品的销售量、市场需求以及产品的市场占有率,从而帮助企业制定合理的生产计划和库存管理策略。

(5)可视化展示与决策支持:

通过绘制分类结果的可视化图像,可以直观地展示数据的特征和分类结果,从而帮助市场决策者快速了解市场情况,做出合理的决策。

二、实验步骤

(例如:你认为这个实验的具体步骤以及顺序?可以使用自然语言或伪代码,流程图描述。)

三、实验结果及分析

1、解析实验过程、分析实验结果

(例如:你在实验中遇到了什么样的问题?学习到了哪些经验?如超参数设置所带来的实验结果截然不同而对此产生的感悟。你的实验结果又反映出着哪些现实问题?如xx地区物价的趋势与当地的经济情况成正相关等。)

经验:

(1)数据集的划分对模型性能有重要影响。不同的训练集和测试集比例可能导致不同的结果,需要根据具体问题选择合适的划分比例。

(2)交叉验证可以更好地评估模型的泛化能力,避免过拟合或欠拟合的问题。通过交叉验证可以得到更稳定的模型性能评估结果。

(3)自助法可以在数据集样本不平衡的情况下提供更好的模型性能。通过自助采样可以增加少数类样本的权重,提高模型对少数类的识别能力。

(3)不同的分类算法适用于不同的问题。在实验中可以尝试多种分类算法,并比较它们的性能差异,选择最合适的算法。

(4)模型评估指标的选择取决于具体的问题需求。准确率、错误率、精确率和召回率等指标可以提供不同角度的模型性能评估结果,需要根据具体问题选择合适的指标。

现实问题:

(1)物价的趋势与当地的经济情况可能存在正相关关系。可以通过收集物价和经济数据,进行相关性分析,以预测物价的趋势。

(2)在处理分类问题时,样本不平衡可能导致模型对少数类的识别能力较弱。可以通过采用自助法等方法来提高模型的性能。

(3)不同地区的数据集分布可能对模型性能有影响。可以通过对比不同地区的数据集和模型性能,发现地区之间的差异。

四.附源代码

#生成数据集,将数据集划分为训练集和测试集
import numpy as np
from sklearn.model_selection import train_test_split
X=np.random.rand(5,2)
y=np.random.randint(0,2,size=5)
X,y
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.5,random_state=42)#测试集占比40%
print("训练集:",X_train)
print("训练集大小:",X_train.shape[0])
print("测试集:",X_test)
print("测试集大小: ",X_test.shape[0])
#交叉验证法
import numpy as np
from sklearn.model_selection import KFold
X=np.random.randint(1,100,20).reshape((10,2))
print("X:",X)
kf=KFold(n_splits  =5,shuffle  =False)
print(kf) #√建一个NFold对亲,指定参数n_splits=5表示将数据集分成5份进行交又验证,shuffle=False表示不对教招进行洗牌蝶作。
for X_train,X_test in kf.split(X):#通过for僧环,每次送代将当前耗次的调练集和测试集的案引打印舱出
    print(X_train,X_test)
for X_train_i,X_test_i in kf.split(X):
print(X[X_train_i],X[X_test_i])  #/印训练集和测试集
#自助法
import random
def bootstrap_sample(data):
    sample=[random.choice(data) for _ in data]#遍历
    return sample
data=[1,2,3,4,5,6,7,8,9,10]
n_samples=5
samples=[bootstrap_sample(data) for _ in range(n_samples)]
print(samples)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix,accuracy_score,precision_score,recall_score
iris=load_iris()#导入数据集
X=iris.data[:,: 2]
y=iris.target
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)
#使用LogisticRegression进行线性分类
lr=LogisticRegression(random_state=42)
lr.fit(X_train,y_train)
y_pred=lr.predict(X_test)
print(y_test)
print(y_pred)
#精确率
count=0
for i in range(0,len(y_test)-1,1):
    if y_pred[i]==y_test[i]:
        count+=1
accuracy=count/len(y_test)
print("Accuracy:",accuracy)
error_rate=1-accuracy
print("Error Rate:",error_rate)
from sklearn.linear_model import LogisticRegression
lr=LogisticRegression(random_state=42)
lr.fit(X_train,y_train)
y_pred=lr.predict(X_test)
def precision(y_test,y_pred):
    true_positives=0
    false_positives=0
    false_negatives=0
    
    for i in range(len(y_test)):
        if y_test[i]==1 and y_pred[i]==1:
            true_positives+=1
        elif y_test[i]==0 and y_pred[i]==1:
            false_positives+=1
        elif y_test[i]==1 and y_pred[i]==0:
            false_negatives+=1
    if  true_positives + false_positives==0:
        return 0
    return true_positives,false_positives,false_negatives 
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.5,random_state=42)    
precision = precision(y_test,y_pred)
#print (precision)
precision1=precision[0]/precision[0]+precision[1]
print(precision1)
recall=precision[0]/precision[0]+precision[2]
print(recall)
#绘制分类结果的可视化图像
import matplotlib.pyplot as plt
x_min,x_max= X [:, 0].min()-0.5,X[:, 0].max()+0.5
y_min,y_max=X[:, 1].min()-0.5,X[:, 1].max()+0.5
xx,yy=np.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02))
Z=lr.predict(np.c_[xx.ravel(),yy.ravel()])
Z=Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=plt.cm.Paired)
plt.scatter(X[:,0],X[:,1],c=y,edgecolors='k',cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Logistic Regression on Iris dataset')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.show()

结果展示

 

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值