当前位置:   article > 正文

机器学习实例篇

机器学习例子csdn

无论是风里,还是在雨里,我都在这里守候着你~

前言:

阅读本篇文章需要阅读:

数据分析篇(一),数据分析篇(二)

数据分析篇(三)数据分析(四)

数据分析篇(五)数据分析篇(六)

机器学习篇(一)机器学习篇(二)机器学习篇(三)

k-近邻算法实例

数据来源:https://www.kaggle.com/c/facebook-v-predicting-check-ins

# 注册该网站需要科学上网,下载数据也比较慢

# 后台回复数据获取数据,科学上网插件也给大家,免费试用3天。

题目是这样的:

本次比赛的目的是预测一个人想要登记的地方。为了本次比赛的目的,

Facebook创建了一个人工世界,其中包括10多公里10平方公里的100,000多个地方。

对于给定的坐标集,您的任务是返回最可能位置的排序列表。数据被制作成类似于来自移动

设备的位置信号,让您了解如何处理由不准确和嘈杂的值导致的实际数据。

不一致和错误的位置数据可能会破坏Facebook Check In等服务的体验。

数据说明:

train.csv,test.csv 

row_id:签到事件的id

xy:坐标

准确度:定位精度 

时间:时间戳

place_id:业务的ID,这是您预测的目标

# 我只用了train.csv,由于数据量太大。你可以两个都用上。

实例:

  1. # 导入模块api
  2. import pandas as pd
  3. # 标准化处理模块
  4. from sklearn.preprocessing import StandardScaler
  5. # 分割数据集
  6. from sklearn.model_selection import train_test_split
  7. # k-近邻算法
  8. from sklearn.neighbors import KNeighborsClassifier
  9. # k-近邻预测用户签到位置
  10. def knncls():
  11.     # 读取数据
  12.     data = pd.read_csv("D:/shuju/train.csv")
  13.     #print(data.head(5))
  14.     '''
  15.         ID     x坐标   y坐标  坐标准确性 时间戳  预测目标
  16.        row_id   x       y     accuracy   time    place_id
  17.     0    0    0.7941  9.0809     54     470702  8523065625
  18.     1    1    5.9567  4.7968     13     186555  1757726713
  19.     2    2    8.3078  7.0407     74     322648  1137537235
  20.     3    3    7.3665  2.5165     65     704587  6567393236
  21.     4    4    4.0961  1.1307     31     472130  7440663949
  22.     '''
  23.     # 由于数据过大,很慢,这里我选择缩小数据(你可以不进行缩小,效果更好)
  24.     # 只取x在1.0-1.25之间的和y在2.5-2.75之间的,你可以随意修改,也可以读取全部
  25.     data = data.query('x > 1.0& x < 1.25 & y > 2.5 &y<2.75')
  26.     # 处理时间戳,unit = 's'表示按照秒转换。
  27.     time_value = pd.to_datetime(data['time'],unit = 's')
  28.     #print(time_value) # 17467条数据
  29.     '''
  30.     863        1970-01-03 20:13:11
  31.     1693       1970-01-04 06:16:23
  32.     9877       1970-01-06 19:49:58
  33.     ...
  34.     Name: time, Length: 17467, dtype: datetime64[ns]
  35.     '''
  36.     # 把日期转换成字典 转换成字典可以获取年月日等
  37.     time_value = pd.DatetimeIndex(time_value)
  38.     # 构造时间特征加入到data中,选择自己需要的特征(年月都是一样的,只获取日,小时,工作日)
  39.     # 如果直接写成data['day'] = time_value.day 会有警告信息
  40.     data = data.copy()
  41.     data.loc[:,'day'] = time_value.day
  42.     data.loc[:,'hour'] = time_value.hour
  43.     data.loc[:,'weekday'] = time_value.weekday
  44.     # 删除时间戳,按照列删除,在pd中是1,在sklearn中是1
  45.     data = data.drop(['time'],axis=1)
  46.     # print(data)
  47.     '''
  48.                 row_id       x       y  accuracy   place_id  day  hour  weekday
  49.     863            863  1.3828  2.6444        64  5784939944    3    20        5
  50.     1693          1693  1.2583  2.6839        72  3952821602    4     6        6
  51.     '''
  52.     # 删除目标值重复少于4个的数据,目标值太多
  53.     # 分组求个数
  54.     place_count = data.groupby('place_id').count()
  55.     # 分组后place_count.row_id为次数
  56.     # 按照place_id分组会将目标值当成索引,reset_index将索引变为0,1..加入到特征列
  57.     tf = place_count[place_count>4].reset_index()
  58.     # 过滤掉少于4个签到的目标值
  59.     data = data[data['place_id'].isin(tf.place_id)]
  60.     # 取出特征值和目标值(删除目标值)
  61.     y = data['place_id']
  62.     x = data.drop(['place_id'],axis = 1)
  63.     # 删除row_id特征
  64.     data = data.drop(['row_id'],axis=1)
  65.     # 数据分割成训练集和测试集
  66.     # x_train:训练集特征值
  67.     # x_test:测试集特征值
  68.     # y_train:训练集目标值
  69.     # y_test:测试集目标值
  70.     x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.25)
  71.     # 如果不做标准化处理使用k-近邻算法
  72.     # knn = KNeighborsClassifier(n_neighbors=5)
  73.     # 传入训练集的特征值和目标值
  74.     # knn.fit(x_train,y_train)
  75.     # 得出预算结果,通过测试集的特征值来预测
  76.     # y_predict = knn.predict(x_test)
  77.     # 查看准确率,输入测试集的特征值和目标值
  78.     # print('预测准确率为:',knn.score(x_test,y_test))
  79.     '''
  80.     预测准确率为: 0.011907487978016945
  81.     也就是1.1% 100个数据有1个对的
  82.     原因:1、数据没有全用上,我这里只抽取了部分数据
  83.          2、未做标准化处理
  84.          3、没有删除其他影响的特征,比如row_id
  85.     在上面删除下row_id来再试一下
  86.     得出:预测准确率为: 0.013510419051980764
  87.     增加了一点,但是效果不明显,继续做标准化处理
  88.     '''
  89.     # 使用标准化处理和交叉验证网格搜索
  90.     std = StandardScaler()
  91.     # 这里无论是训练集还是测试集的特征值都需要做标准化处理
  92.     x_train = std.fit_transform(x_train)
  93.     # 这里不需要再调用fit,因为fit只是计算一些值,计算一遍之后就不需要了
  94.     x_test = std.transform(x_test)
  95.     knn = KNeighborsClassifier()
  96.     # 网格搜索
  97.     # 构造参数n_neighbors值进行搜索
  98.     param = {'n_neighbors':[2,5,10]}
  99.     gc = GridSearchCV(knn,param_grid = param,cv = 10)
  100.     # 传入训练集的特征值和目标值
  101.     gc.fit(x_train,y_train)
  102.     # 得出预算结果,通过测试集的特征值来预测
  103.     y_predict = gc.predict(x_test)
  104.     # 查看准确率,输入测试集的特征值和目标值
  105.     print('预测准确率为:',gc.score(x_test,y_test))
  106.     print('最好的结果:',gc.best_score_)
  107.     print('选择的模型为也就是n_neighbors值:',gc.best_estimator_)
  108.     '''
  109.     预测准确率为: 0.4069557362240289
  110.     最好的结果: 0.40099382623098934
  111.     选择的模型为也就是n_neighbors值: KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
  112.                metric_params=None, n_jobs=None, n_neighbors=10, p=2,
  113.                weights='uniform')
  114.     这个相比未做标准化差别就很大了,但是准确率依然还是不够可以试试读取所有数据。
  115.     '''
  116. if __name__ == "__main__":
  117.     knncls()

#注释很详细,这里不做说明。

朴素贝叶斯算法实例

数据来源:Sklearn自带数据集

20newsgroups数据集是用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。

数据集收集了大约20,000左右的新闻组文档,均匀分为20个不同主题的新闻组集合。

实例:

  1. import pandas as pd
  2. from sklearn.datasets import fetch_20newsgroups
  3. # 分词
  4. from sklearn.feature_extraction.text import TfidfVectorizer
  5. #朴素贝叶斯算法
  6. from sklearn.naive_bayes import MultinomialNB
  7. def naviebayes():
  8.     '''
  9.     朴树贝叶斯算法实例
  10.     '''
  11.     # 读取数据
  12.     news = fetch_20newsgroups(subset='all')
  13.     # 数据分割
  14.     x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25)
  15.     # 分词用TfidfVectorizer
  16.     tf = TfidfVectorizer()
  17.     # 用训练集分词统计词的重要性
  18.     x_train = tf.fit_transform(x_train)
  19.     x_test = tf.transform(x_test)
  20.     # 使用朴素贝叶斯算法预算
  21.     mlt = MultinomialNB(alpha=1.0)
  22.     mlt.fit(x_train,y_train)
  23.     y_predict = mlt.predict(x_test)
  24.     print('预算准确率为:',mlt.score(x_test,y_test))
  25.     '''
  26.     预算准确率为: 0.8433786078098472
  27.     '''
  28. if __name__ == "__main__":
  29.     naviebayes()

其他

菜单右下角 诚意相册点一点。感谢!!

长按识别二维码

了解,学习python

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号