10 days ago

最近做一个数据挖掘项目,用到sklearn机器学习库,导入20newsgroup数据集总是下载缓慢没反应
于是开始考虑手动下载这个数据集

1.下载20newsbydate.tar.gz文件到文件夹 ~/scikit_learn_data/20news_home/

2.查看当前python路径,保持备用

which python
/Users/lee/.virtualenvs/ai/bin/python

进入文件夹 /Users/lee/.virtualenvs/ai/
(其中,lee是我的mac用户名,ai是虚拟环境名称)

3.修改sklearn原始代码

接着刚刚的文件路径,打开文件 Lib/python/site-packages/sklearn/datasets\twenty_newsgroups.py
找到download_20newsgroups()函数,注释掉下面的代码

logger.info("Downloading dataset from %s (14 MB)", ARCHIVE.url)
archive_path = _fetch_remote(ARCHIVE, dirname=target_dir)

在后面添加

archive_path = os.path.join(target_dir, r'20newsbydate.tar.gz')

注意要使用4个空格缩进。

4.导入数据集

程序中运行代码

from sklearn.datasets import fetch_20newsgroups
all_data = fetch_20newsgroups(subset='all')

观察到文件夹 ~/scikit_learn_data/ 生成缓存文件 20news-bydate_py3.pkz 即表示数据集导入成功

注:以上内容为mac版操作,windows版操作路径略有不同,具体参照楼下参考资料

参考资料:
scikit-learn - 20newsgroups
Sklearn导入数据集20newsgroups报错-no handlers could be fetch_20newsgroups
How to download datasets for sklearn? - python

 
29 days ago

今天看到两个视频,引发我的思考
1.关于坚持———持续努力
其实当年向南极进发的有两个科考队,他们采取了不同的前进策略
一个团队给自己指定了纪律:每天无论发生什么情况,都坚持每天前进30海里
另一个团队相当佛系,天气好的时候就前进,天气不好的时候就休息
结果当然是可想而知了,努力坚持应该是成功的最大秘诀

你渴望一件东西,你想成为怎样的人
你是真的渴望这件东西,真的想成为这样的人么
还是你仅仅是想想而已
每天盯住目标,持续行动,坚持下去,终究会有结果

2.如何面对父母的期望与自己的期望不一致————父母没有错,我也没有错
冥想是正念静观中最主要的一个方式
核心是全身心的关注此时此刻的呼吸、听觉、嗅觉、触觉、味觉等感官的感受来加强对当袭的关照
我们同时动用自己的大脑、身体和情绪,把它们与此时此刻的自己联系起来

一次体验或者一次消费可能不能帮我们解决什么问题,关键是我们迈向了走向自我的那一步

发现自从长大后,与父母的分歧愈来越多
父母希望我留在家乡,找个稳定的工作,娶个当地的姑娘,家里赞助首付,买房买车,安稳度过一生
我不想拘泥小城市,希望在外面闯荡,见见大世面,希望通过自己的努力买房买车,希望自然而然地遇到喜欢的,同时也喜欢我的人,两个人自由地恋爱,然后自然自然走到一起

分歧应该也是好事,我想这也刚好是自我意识的觉醒

之前我是没有自我意识的,小时候知道家里条件不好,父母拼命工作赚钱养家
只是自己只想单纯做一个乖孩子,好好学习,不做危险的事,不给爸妈惹麻烦,同时也不麻烦其他人
上初中时候,遭遇了一场农村孩子遇到城里孩子的危机
从此开始感到特别的空虚迷茫:发现自己没有兴趣爱好,没有特长,没有朋友,没有目标与理想
为了排遣这股压力,我把自己陷入了没头没脑的助人为乐之中:没原则地帮助同学值日打扫卫生,积极为班级活动打下手
但是问题依然没有得到正视和解决,私下很难受和失望,也不知道怎么处理这种心态,不知道向谁倾诉和寻求帮助
这种感觉压在心里,哪怕遇到心理医生,也不知道应该如何去描述我的这份心情和感受
从小跟着爷爷奶奶长大的我,表达是匮乏的,感情是缺失而空白的
有几次,我幻想着可以向当时喜欢我的班主任表达这份压抑,我想说“救救孩子”,可是连这个孩子怎么了,当时的我都无法把自己说清楚
还有几次,我觉得人生多么无趣,恨不得拿起菜刀把自己的胳膊、手掌砍成一段一段

侥幸考上老家最好的高中之一(还好父母听了老师的建议,提前做了中考移民),学习压力变大
这时候家里买了房,按道理此时应该扬眉吐气才是
1.但是当时的我却认为我们本来就是穷人家,只配过穷人的生活,只配一辈子租人家的房子,寄人篱下,然后忍受房东儿媳妇的冷嘲热讽,不应该学人家爱慕虚荣勉强去做超出自己能力范围的事情
于是我是内心极度不认同家里买房这件事,全程我都刻意避免参与,我是到了最后时刻,在搬新家办酒那一天才第一次走进新家
2.我一直把自己家定义为穷人,从来都是看不起富人的,他们都是为富不仁,我们穷人虽然贫穷,但是却占据道德制高点
这一下子突然买了房,仿佛自己站在了坏人的角色,仿佛一下子站在了千夫所指的一面,这一点也是我无法接受的
刚好我选择的学校的学生大多来自乡下、县城————我心目中的穷伙计(当初选择这个学校十有八九是因为初中时周围的同学都是富人,让自己太自卑了,高中希望站到正确的队列中来),自己好不容易找到了队伍,这次一下子又站到了同学的对立面,让我无法接受
为了平衡这种心态,我坚持说家乡话(这时候从乡下来的同学们,开始努力说普通话),平时穿着很朴素,刻意把自己的形象打扮成穷兮兮的乡下佬
刻意回避,甚至有意推脱家里买房的事情,借此希望自己站在舆论道德的制高点,希望自己在群众中没有被孤立
3.刚好家里买房借了很多钱,家里虽然不说,但也让我感受到了压力,懂事的我自然学着压缩开支、压缩欲望,无形帮助家庭节约,为自己的刻意装穷找到了正当合适的理由的掩饰

但是这种行为和思想的分裂,没有给自己带来好处,情感和物质上的刻意压制反而让自己更加压抑,再加上学习上的不顺,导致几乎每晚的失眠
这一切的一切,都无人诉说,无处表达

高中我选择了三所重点高中中最穷的学校,是对初中富人同学带给自己的自卑的逃避
高考我义无反顾地放弃复读,是对高中压抑生活的逃避
大学我选择了长住学校,甚至寒暑假都极少回家,是对无法给自己带来成长,甚至只能带来消极情绪的家庭的逃避
大学毕业后我远离家乡,毅然决然来到杭州,更是对过去无奈经历的一种逃避
今年年初经过深思,我辞掉世界100强工作,是对大公司病、过去怀才不遇经历的一种逃避

一次次看似都在逃避,实际是对美好生活的追求
但愿以后不再选择直接逃避,直面自己的内心,解决一个个心结后从容离开,负重前行终究不是最好的选择

参考资料:
闲聊回顾篇,拼多多,电竞,视频制作【要不然你来10SP】
【箭厂视频】来自东方的神秘力量,禅修被老外发展成心理治疗,在北京四合院开班授课

 
about 1 month ago

作为一个年轻人,如果想在AI方面有所作为,应该关注哪些领域?
1.单纯想赚钱,从事金融领域
金融行业有很多模拟工作,根本不需要人插手,比如银行、信贷员、保险员,很容易被一些程序取代
比如现在的量化交易已经取代了过去的很多操盘手
2.想带来变革,从事无人驾驶领域
无人驾驶的挑战很大,但是随着大量人才和资金的涌入,所有的汽车公司,包括电动汽车都会转向无人驾驶
他们最终会取得重大进展,从而改变我们的出行方式
实现了这些技术后,可以反过来帮我们实现很多技术,比如姐姐目前困难的机器人问题

人工智能能取代什么类型的人类工作?
1.对于那些不需要沟通合作的工作,比如金融领域,包括银行、信贷员、保险员
2.对于那些需要沟通协作的岗位,人工智能很难取代
3.同时对于那些需要爱的领域和场合,人工智能难以取代,比如护理岗位
人类都有情感需求,我们生病了需要一个美丽的护士小姐来嘘寒问暖,不需要一个冷冰冰的机器来服务
李开复提到一家朋友的创业公司,开发了一个老年陪护产品,可以实现很多功能,但是老人家最常使用的就是“人工服务”功能
老人们向客服抱怨“为什么我的儿子还不跟我打电话”,甚至热情洋溢地向客服人员介绍自己的孙子
4.并不能单纯地说哪些工作会被人工智能取代
应该说人类工作需要可以被分解成一些流程,其中的若干流程是可以被人工智能取代的

人形居家服务机器人短期内不会出现
1.现在的人工智能仍属于弱人工智能,只能在单一领域做的很好,无法面对家政这样复杂的场景
2.硬件无法匹配
现在人工智能发展在软件方面如火如荼,但是硬件方面无法达到照料级别的精度和温度
3.目前的人工智能形态,最好不是人形的
一旦做成人形的,大众就有了期待,把她跟真实的人类做各种对比,产品的各种弊端暴露无遗,而且被无限放大,这样对于厂家是不利的
所以现在的人工智能更多以app、智能家具、送货小车、无人车的形式依附在其他硬件上

参考资料:
The Future of AI with Kai-Fu Lee: Udacity Talks

 
about 2 months ago

对于Python开发用户来讲,PIP安装软件包是家常便饭。
但国外的源下载速度实在太慢,浪费时间。而且经常出现下载后安装出错问题。
所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成功率。

国内源

新版ubuntu要求使用https源,要注意。

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:http://pypi.hustunique.com/

山东理工大学:http://pypi.sdutlinux.org/

豆瓣:http://pypi.douban.com/simple/

临时使用

可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple,例如:

pip install pyspider -i https://pypi.tuna.tsinghua.edu.cn/simple

这样就会从清华这边的镜像去安装pyspider库。

永久修改,一劳永逸

Linux/ Mac下,修改 ~/.pip/pip.conf (没有就创建一个文件夹及文件。文件夹要加“.”,表示是隐藏文件夹)

vim ~/.pip/pip.conf

设置内容如下:

[global]
timeout=40
index-url=http://pypi.douban.com/simple
extra-index-url=http://mirrors.aliyun.com/pypi/simple/
extra-index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
extra-index-url=http://pypi.mirrors.ustc.edu.cn/simple/

[install]
trusted-host=pypi.douban.com
trusted-host=mirrors.aliyun.com
trusted-host=pypi.tuna.tsinghua.edu.cn
trusted-host=pypi.mirrors.ustc.edu.cn

windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini。内容同上。

2018.12.24补充
经过后续实测,以上配置文件中extra-index-urltrusted-host不能重复出现,只能存在一个
而且trusted-host是为了强制将http源设置为安全可信来源,否则系统会报错且自动忽略该py源
推荐使用阿里云的镜像,它更新频率比较高,与源在时间上差距很小
所以,配置文件内容建议更新如下(保留一个企业源,一个高校源,而且刚好一个http,一个https):

[global]
timeout=40
index-url=http://mirrors.aliyun.com/pypi/simple/
extra-index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
# extra-index-url=http://pypi.douban.com/simple
# extra-index-url=http://pypi.mirrors.ustc.edu.cn/simple/

[install]
trusted-host=mirrors.aliyun.com
# trusted-host=pypi.douban.com
# trusted-host=pypi.tuna.tsinghua.edu.cn
# trusted-host=pypi.mirrors.ustc.edu.cn

参考资料:
让pip使用国内镜像
Mac pip 设置国内代理源
指定多个pip源
pip:指定多个源
通过PyPI镜像安装Python包

 
about 2 months ago

1.遇到问题

先放上人脸识别代码

import cv2  # 计算机视觉包

# 认得人脸长什么样子
# 人脸识别中的默认分类器,主要用于人脸图片中的人脸轮廓的识别
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")


def detect(gray, frame):
    # 处理黑白画面,用人脸1.3倍大小的框标识出人脸,线条宽带5像素
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    # 指定画框框的位置
    for (x, y, w, h) in faces:  # 扫描整张图片
        cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
        roi_gray = gray[y:y + h, x:x + w]
        roi_color = frame[y:y + h, x:x + w]
    return frame  # 把处理完的整张照片,回传


video_capture = cv2.VideoCapture(0)
while True:
    # 读取摄像头采集到的画面
    _, frame = video_capture.read()
    # 把画面转成黑白,在opencv中处理颜色的顺序是“蓝绿红”
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    canvas = detect(gray, frame)  # 把结果展示在画布上面
    cv2.imshow("Video", canvas)  # 把结果展示出来

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

video_capture.release()
cv2.destroyAllWindows()

运行时出现报错

Traceback (most recent call last)
<ipython-input-6-9cceee0010e9> in <module>
      3     _, frame = video_capture.read() # 读取摄像头采集到的画面
      4     gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) # 把画面转成黑白,在opencv中处理颜色的顺序是“蓝绿红”
----> 5     canvas = detect(gray,frame) # 把结果展示在画布上面
      6     cv2.imshow("Video",canvas) # 把结果展示出来
      7 

<ipython-input-5-0d22d3377ae6> in detect(gray, frame)
     12             cv2.rectangle(roi_color,(ex, ey), (ex+ew, ey+eh),(0,255,0),2)
     13 
---> 14         smiles = smile_cascade.detectMultiScale(roi_gray,1.7,22)
     15         for (sx, sy, sw, sh) in smiles: # 扫描整张图片
     16             cv2.rectangle(roi_color,(sx, sy), (sx+sw, sy+sh),(0,0,255),2)

error: OpenCV(3.4.3) /Users/travis/build/skvark/opencv-python/opencv/modules/objdetect/src/cascadedetect.cpp:1698: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

2.查找原因

经过分析报错信息和一番搜索,发现主要问题出现在第二行代码
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
程序在当前文件夹搜索分类器haarcascade_frontalface_default.xml,但是却没有找到,因此需要指定该分类器的绝对路径
经过全盘搜索,发现电脑上并没有该分类器,需要自行到互联网下载

3.解决问题:单独下载人脸识别分类器

官方解决方案是到github上下载opencv到所有库文件,结果令人乍舌

(ai) lee$:git clone https://github.com/lyy1988323/opencv.git
Cloning into 'opencv'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (25/25), done.
Receiving objects:   0% (427/245503), 124.01 KiB | 114.00 KiB

整个库文件有24.5万个文件,下载极为缓慢而且冗余,遂考虑仅仅下载需要到人脸识别分类器文件

问题就转变成如何下载github的一个文件或者文件夹
经过搜索,发现有各种解决方案:web版,chrome插件,命令行工具等
于是,选择了最简单的web解决方案:
打开后右上角输入需要下载的github的一个文件或者文件夹url:https://github.com/opencv/opencv/tree/master/data/haarcascades
然后点击右侧Download即可

参考资料:
GitHub/opencv
GitHub部分文件下载
Download a single folder or directory from a GitHub repo

 
about 2 months ago

TensorFlow有一个亮点就是,我们能看到自己写的程序,这个功能就是Tensorboard
下面介绍开启Tensorboard的步骤
1.数据序列化-events文件 --- jupyter或ipython中执行,通常在Session会话中运行

import tensorflow as tf
# 返回filewriter,写入事件文件到指定目录(最好用绝对路径),以提供给tensorboard使用
tf.summary.FileWriter('/tmp/tensorflow/summary/test/', graph=sess.graph)

这将在指定目录中生成一个 event 文件,其名称格式 events.out.tfevents.{timestamp}.{hostname}
2.启动TensorBoard ---- 命令行中执行

tensorboard  --logdir="/tmp/tensorflow/summary/test/"

第一次会报一个错误

Traceback (most recent call last):
  File "c:\users\hp\appdata\local\programs\python\python35\Lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\hp\appdata\local\programs\python\python35\Lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\HP\Envs\data_process\Scripts\tensorboard.exe\__main__.py", line 5, in <module>
  File "c:\users\hp\envs\data_process\lib\site-packages\tensorboard\main.py", line 28, in <module>
    import tensorflow as tf
  File "c:\users\hp\envs\data_process\lib\site-packages\tensorflow\__init__.py", line 24, in <module>
    from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
  File "c:\users\hp\envs\data_process\lib\site-packages\tensorflow\python\__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "c:\users\hp\envs\data_process\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 30, in <module>
    self_check.preload_check()
  File "c:\users\hp\envs\data_process\lib\site-packages\tensorflow\python\platform\self_check.py", line 55, in preload_check
    % build_info.msvcp_dll_name)
ImportError: Could not find 'msvcp140.dll'. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environment variable. You may install this DLL by downloading Visual C++ 2015 Redistributable Update 3 from this URL: https://www.microsoft.com/en-us/download/details.aspx?id=53587

主要原因是:TensorFlow是基于VC++2015开发的,所以需要下载安装VisualC++ Redistributable for Visual Studio 2015 来获取MSVCP140.DLL的支持。
解决方案系统已经有提示:到指定网址去下载软件Visual C++ 2015 Redistributable

3.再次启动TensorBoard
系统提示运行成功

2018-11-23 19:23:29.644801: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
W1123 19:23:29.673004 Reloader tf_logging.py:121] Found more than one graph event per run, or there was a metagraph containing a graph_def, as well as one or more graph events.  Overwriting the graph with the newest event.
W1123 19:23:29.681026 Reloader tf_logging.py:121] Found more than one metagraph event per run. Overwriting the metagraph with the newest event.
TensorBoard 1.8.0 at http://小李子爱生活:6006 (Press CTRL+C to quit)

将出现在最后一行的urlhttp://小李子爱生活:6006复制到浏览器打开即可

参考资料:
运行tensorboard --logdir=log遇到的错误之can't assign to operator
Windows下安装TensorFlow快速教程

 
2 months ago

一.python中的随机数模块

1.产生(0,1)范围内的一个随机小数

In[4]: random.random()
Out[4]: 0.6808996688503847

2.[a,b]范围内产生一个随机整数

In[6]: random.randint(0,2)
Out[6]: 1

3.[a,b)范围内产生一个随机整数

In[9]: random.randrange(0,2)
Out[9]: 1

4.从队列中随机选取一个元素

In[26]: random.choice((4,8,9))
Out[26]: 4

5.从列表中随机选取n个元素

In[27]: random.sample((4,8,9),2)
Out[27]: [9, 4]

6.[a,b]或[a,b)范围内产生一个随机小数

In[28]: random.uniform(1,2)
Out[28]: 1.6627994729261206
 
2 months ago

参考资料:
离散型变量的编码方式——one-hot与哑变量

 
2 months ago

由于Python和各个第三方库的版本众多,因此有些软件包或第三方库就容易出现版本不兼容的问题。
很多程序需要在指定的软件版本才能正常运行,此时虚拟环境就应运而生
通过 virtualenv 这个工具,就可以构建一系列 虚拟的Python环境 ,然后在每个环境中安装需要的软件包(配合 pip 使用)
这一系列的环境是相互隔离的。作为一个独立的环境就不容易出现版本问题,还方便部署。
1.安装虚拟环境管理器

pip install virtualenv
pip install virtualenvwrapper-win # 这是对virtualenv的封装版本,一定要在virtualenv后安装 

2.创建虚拟环境(虚拟环境名称以"myproject"为例)

mkvirtualenv myproject

如果你的电脑安装了多个不同版本的python解释器(如python2.7,python3.5,python.7),需要指定版本,格式如下
mkvirtualenv --python=(python解释器安装路径) (虚拟环境名字)
python解释器安装路径获取方式where python
这里以我的显示结果为例(我的电脑只安装了python3.5)

C:\Users\HP>where python
C:\Users\HP\AppData\Local\Programs\Python\Python35\python.exe

因此,创建虚拟环境的完整命令为

mkvirtualenv --python=C:\Users\HP\AppData\Local\Programs\Python\Python35\python.exe myproject

此时系统会自动进入虚拟环境,命令行最前面显示的就是当前虚拟环境的名称

(myproject) C:\Users\HP>

然后就可以在该虚拟环境下使用pip安装各种包了

pip install XXX

如果你在创建虚拟环境时没有指定python解释器,也不用担心,这里还有补救措施

python -m pip install xxx   # python3版本安装包
python2 -m pip install xxx  # python2版本安装包

如果你既在创建虚拟环境时没有指定python解释器,也没有采取补救措施,pip install XXX默认安装在python3解释器下
3.退出虚拟环境deactivate
4.列出所有虚拟环境 lsvirtualenv
5.激活/进入 虚拟环境workon myproject
6.冻结环境
所谓冻结(freeze)环境,就是将当前环境的软件包等固定下来

pip freeze >packages.txt  # 安装包列表保存到文件packages.txt中

7.重建环境
重建(rebuild)环境就是在部署的时候,在生产环境安装好对应版本的软件包,不要出现版本兼容等问题

pip install -r packages.txt

这样就可以批量安装对应版本的软件包,快速重建环境,完成部署
6.删除虚拟环境rmvitualenv myproject

下面是几个高(鸡)级(肋)操作,非正常人使用(都需要在虚拟环境下使用)

1.进入虚拟环境目录

(myproject) C:\Users\HP>cdvirtualenv
(myproject) C:\Users\HP\Envs\myproject>

2.进入虚拟环境的site-packages目录

(myproject) C:\Users\HP\Envs\myproject>cdsitepackages
(myproject) C:\Users\HP\Envs\myproject\Lib\site-packages>

3.列出site-packages目录的所有软件包

lssitepackages

这个操作比较鸡肋,还是使用pip list或者pip freeze
4.更改虚拟环境路径
默认创建的虚拟环境位于C:\Users\username\envs可以通过环境变量 WORKON_HOME 来定制。

通过计算机-->属性-->高级系统设置-->环境变量-->在系统变量中新建“变量名”:WORKON_HOME,变量值:“你自定义的路径”
(此处不变贴图,望见谅)

参考资料:
windows虚拟环境
windows下python虚拟环境virtualenv安装和使用

 
2 months ago

注:本文所有操作在windows环境下运行
1.利用conda创建虚拟环境(虚拟环境名称以'myproject'为例)

conda create -n myproject python=3

2.进入/切换虚拟环境:这是以后进入虚拟环境的操作;第一次创建虚拟环境后会直接进入因此不需要执行以下命令

activate myproject

3.安装支持虚拟环境的插件nb_conda:否则系统表面上切换到虚拟环境,但实际上虚拟环境并没有起到作用

conda install nb_conda

4.启动/重启 jupyter notebook

jupyter notebook

此时jupyter notebook真正应用在虚拟环境中了,在jupyter notebook界面新建文件界面可以看到

参考资料:
如何在Jupyter Notebook中使用Python虚拟环境?
虚拟环境jupyter notebook使用