机器学习实操练习 1 (没有理论)

本文详细介绍机器学习实操过程,涵盖数据集使用、特征抽取、文本特征提取、数据预处理、特征降维等关键技术,通过具体案例展示knn算法模型及网格搜索与交叉验证的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习实操练习 1 (没有理论)

from sklearn.model_selection import train_test_split#分开数据 测试 训练
import pandas as pd
from sklearn.datasets import load_iris
#特征转换
from sklearn.feature_extraction import DictVectorizer#字典特征转换
from sklearn.feature_extraction.text import  CountVectorizer#文本特征转换
#特征预处理
from sklearn.preprocessing import  MinMaxScaler #归一化
from sklearn.preprocessing import  StandardScaler#标准化
#特征降维
from sklearn.feature_selection import  VarianceThreshold#低方差特征过滤
from scipy.stats import pearsonr #相关系数 皮尔斯相关系数
from sklearn.decomposition import  PCA#PCA降维 主成分分析
#knn算法模型
from sklearn.neighbors import KNeighborsClassifier
#网格搜索和交叉验证
from sklearn.model_selection import GridSearchCV

import jieba#分词


# 内置数据集的使用
def datasets_demo():

    #内置数据集的使用
    #获取数据
    iris = load_iris()
    print("数据集\n",iris)
    print("数据集描述\n",iris.DESCR)
    print("特征值名称\n",iris.feature_names)
    print("查看特征值\n",iris.data,iris.data.shape)

    #数据划分
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
    print(x_train,x_train.shape)

    return None

 #字典特征抽取

#字典特征抽取
def dict_demo():
    #字典特征抽取

    data = [{'1': 'h', 't': 100}, {'1': 's', 't': 120}, {'1': 's', 't': 130}, {'1': 'h', 't': 110}, ]
    #实例化一个转化器类
    #sparse稀疏矩阵  默认转换器中的sparse等于True
    transfer = DictVectorizer(sparse=False)
    #调用fit_transform
    data_new = transfer.fit_transform(data)

    print(data_new)#data.toarray得到的矩阵结果与sparse=false相同
    print(transfer.get_feature_names())
    #data = pd.read_csv("base.csv",encoding='gbk')
    #print(data)

#文本特征提取
def count_demo():
    #文本特征提取
    data = ['like day one two','yes one day good,one']
    #实例化转换器类
    transfer =CountVectorizer()
    #调用fit_transform
    data_new = transfer.fit_transform(data)
    print(data_new)#稀疏矩阵形式
    print(data_new.toarray())#正常矩阵形式
    print(transfer.get_feature_names())

#中文文本特征抽取
def count_chinese_demo():
    #中文文本特征抽取
    data = ['该生学习认真努力,注重专业知识学习,能将学习的知识与实践相结合,积极参加社会实践;',
            '积极参与学校和院系组织的活动,为班级建设做出了积极的贡献;',
            '团结同学,尊敬师长,遵守校规校纪,乐于助人。']
    data_new = []
    print(list(jieba.cut('找打的骄傲空当接龙')))
    for i in data:
        data_new.append(' '.join(list(jieba.cut(i))))
    print(data_new)

    #实例化转化器
    transfer = CountVectorizer(stop_words=['该'])#stop_words 去除不想要的特征文字
    #调用fit_transform
    new_data = transfer.fit_transform(data_new)
    print(new_data)
    print(new_data.toarray())
    print(transfer.get_feature_names())

#归一化 容易受异常值影响
def minmax():#归一化 容易受异常值影响
    data = pd.read_csv("base.csv", encoding='gbk')
    #print(data)
    data = data.iloc[:,:3]
    #print(data)
    #构造转换器
    transfer = MinMaxScaler(feature_range=[1,2])#feature_range 缩取的范围
    #调用fit——transform
    data_new = transfer.fit_transform(data)
    #print(data)
    data.iloc[:, :3] = data_new
    print(data)

#标准化 一般使用标准化做数据预处理
def stand_demo():#标准化 一般使用标准化做数据预处理
    data = pd.read_csv("base.csv", encoding='gbk')
    #print(data)
    data = data.iloc[:,:3]
    #print(data)
    #构造转换器
    transfer = StandardScaler()
    #调用fit——transform
    data_new = transfer.fit_transform(data)
    #print(data)
    data.iloc[:, :3] = data_new
    print(data)

#特征过滤  低方差 相关系数
def variance_demo():
    #低方差特征过滤
    data = pd.read_csv("base.csv", encoding='gbk')
    data_new = data.iloc[:,0:3]
    #实例化一个转换器类
    transfer = VarianceThreshold(threshold=5)#threshold 设置方差阈值
    #调用fit_transform
    data_new = transfer.fit_transform(data_new)

    data = data.dropna()
    #运用相关系数时不可以有空数据和非数值数据
    r1 = pearsonr(data['注册时间'],data['注册资本'])
    print(r1)

#主成分分析 PCA降维
def pca_demo():
    #主成分分析 PCA降维
    data = [[1,2],[55,3],[1,2]]
    #创建转换器实例
    #n_component 为小数时为保留多少信息
    #n_component为整数时为保留到几个维度
    transfer = PCA(n_components=0.95)
    transfer2 = PCA(n_components=2)
    #调用fit_transform
    data_new = transfer.fit_transform(data)
    print(data_new)
    data_new = transfer2.fit_transform(data)
    print(data_new)

#knn算法分类iris
def knn_iris_demo():
    #knn算法分类iris
    #获取数据
    iris = load_iris()

    #划分数据集
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)

    #特征工程:标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)#需要与训练集的fit数据一致,只进行数据转换

    #knn算法估计器
    estimator = KNeighborsClassifier(n_neighbors=5)#邻居判别的个数
    estimator.fit(x_train,y_train)

    #模型评估
    #方法一
    y_predict = estimator.predict(x_test)
    print('y_predict:\n',y_predict)
    print("真实值与预测值对比:\n",y_predict == y_test)
    #方法二
    score = estimator.score(x_test,y_test)
    print("准确率:",score)

#knn中加入网格搜索和交叉验证分类iris
def knn_iris_wg_jc_demo():
    #knn中加入网格搜索和交叉验证分类iris

    #导入数据
    iris = load_iris()
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=12)

    #特征工程 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    #knn模型
    estimator = KNeighborsClassifier()

    #加入网格搜索和交叉验证
    #参数准备
    #param_grid 为选择的邻居个数
    #cv 为选择的指定几折交叉验证
    param_dict = {'n_neighbors':[1,3,5,7,9,11]}
    estimator = GridSearchCV(estimator,param_grid=param_dict,cv=10)
    estimator.fit(x_train,y_train)

    #模型评估
    # 模型评估
    # 方法一
    y_predict = estimator.predict(x_test)
    print('y_predict:\n', y_predict)
    print("真实值与预测值对比:\n", y_predict == y_test)
    # 方法二
    score = estimator.score(x_test, y_test)
    print("准确率:", score)

    #最佳结果
    print("最佳参数:",estimator.best_params_)
    print("最佳结果:",estimator.best_score_)
    print("最佳估计器:",estimator.best_estimator_)

if __name__ == '__main__':

    #print(data)
    #datasets_demo()
    #dict_demo()
    #count_demo()
    #count_chinese_demo()
    #minmax()
    #variance_demo()
    #pca_demo()

    '''year = pd.read_csv('year_report.csv',encoding='gbk')
   # print(year)
    #crosstab 找到两个特征之间的关系 统计出来
    year = pd.crosstab(year['ID'],year['year'])
    print(year)'''

    #knn_iris_demo()
    knn_iris_wg_jc_demo()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值