-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpython.html
More file actions
945 lines (682 loc) · 50.5 KB
/
python.html
File metadata and controls
945 lines (682 loc) · 50.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>
python - 星晨入梦
</title>
<link href="atom.xml" rel="alternate" title="星晨入梦" type="application/atom+xml">
<link rel="stylesheet" href="asset/css/foundation.min.css" />
<link rel="stylesheet" href="asset/css/docs.css" />
<script src="asset/js/vendor/modernizr.js"></script>
<script src="asset/js/vendor/jquery.js"></script>
<script src="asset/highlightjs/highlight.pack.js"></script>
<link href="asset/highlightjs/styles/github.css" media="screen, projection" rel="stylesheet" type="text/css">
<script>hljs.initHighlightingOnLoad();</script>
<script type="text/javascript">
function before_search(){
var searchVal = 'site:blog.cxstars.com ' + document.getElementById('search_input').value;
document.getElementById('search_q').value = searchVal;
return true;
}
</script>
</head>
<body class="antialiased hide-extras">
<div class="marketing off-canvas-wrap" data-offcanvas>
<div class="inner-wrap">
<nav class="top-bar docs-bar hide-for-small" data-topbar>
<section class="top-bar-section">
<div class="row">
<div style="position: relative;width:100%;"><div style="position: absolute; width:100%;">
<ul id="main-menu" class="left">
<li id=""><a target="_self" href="index.html">Home</a></li>
<li id=""><a target="_self" href="archives.html">Archives</a></li>
<li id=""><a target="_self" href="about.html">About</a></li>
</ul>
<ul class="right" id="search-wrap">
<li>
<form target="_blank" onsubmit="return before_search();" action="http://google.com/search" method="get">
<input type="hidden" id="search_q" name="q" value="" />
<input tabindex="1" type="search" id="search_input" placeholder="Search"/>
</form>
</li>
</ul>
</div></div>
</div>
</section>
</nav>
<nav class="tab-bar show-for-small">
<a href="javascript:void(0)" class="left-off-canvas-toggle menu-icon">
<span> 星晨入梦</span>
</a>
</nav>
<aside class="left-off-canvas-menu">
<ul class="off-canvas-list">
<li><a target="_self" href="index.html">Home</a></li>
<li><a target="_self" href="archives.html">Archives</a></li>
<li><a target="_self" href="about.html">About</a></li>
<li><label>Categories</label></li>
<li><a href="ml.html">ml</a></li>
<li><a href="MySQL.html">MySQL</a></li>
<li><a href="python.html">python</a></li>
<li><a href="nginx.html">nginx</a></li>
<li><a href="golang.html">golang</a></li>
<li><a href="book.html">book</a></li>
<li><a href="arch.html">arch</a></li>
<li><a href="redis.html">redis</a></li>
<li><a href="life.html">life</a></li>
<li><a href="php.html">php</a></li>
</ul>
</aside>
<a class="exit-off-canvas" href="#"></a>
<section id="main-content" role="main" class="scroll-container">
<script type="text/javascript">
$(function(){
$('#menu_item_index').addClass('is_active');
});
</script>
<div class="row">
<div class="large-8 medium-8 columns">
<div class="markdown-body home-categories">
<div class="article">
<a class="clearlink" href="14890706857877.html">
<h1>unsupervised learning</h1>
<div class="a-content">
<div class="a-content-text">
<h2 id="toc_0">中英字幕</h2>
<p><strong>视频用中文字幕(捂脸,英文太渣),一边看视频一边看字幕文件,时间+中项对照</strong><br/>
<a href="https://www.coursera.org/learn/machine-learning/lecture/olRZo/unsupervised-learning">https://www.coursera.org/learn/machine-learning/lecture/olRZo/unsupervised-learning</a><br/>
0:00<br/>
In this video, we'll talk about the second major type of machine learning problem, called Unsupervised Learning. <br/>
在这段视频中 我们要讲 第二种主要的机器学习问题 叫做无监督学习 <br/>
0:06<br/>
In the last video, we talked about Supervised Learning. Back then, recall data sets that look like this, where each example was labeled either as a positive or negative example, whether it was a benign or a malignant tumor. <br/>
在上一节视频中 我们已经讲过了监督学习 回想起上次的数据集 每个样本 都已经被标明为 正样本或者负样本 即良性或恶性肿瘤 <br/>
0:20<br/>
So for each example in Supervised Learning, we were told explicitly what is the so-called right answer, whether it's benign or malignant. In Unsupervised Learning, we're given data that looks different than data that looks like this that doesn't have any labels or that all has the same label or really no labels. <br/>
因此 对于监督学习中的每一个样本 我们已经被清楚地告知了 什么是所谓的正确答案 即它们是良性还是恶性 在无监督学习中 我们用的数据会和监督学习里的看起来有些不一样 在无监督学习中 没有属性或标签这一概念 也就是说所有的数据 都是一样的 没有区别 <br/>
0:39<br/>
So we're given the data set and we're not told what to do with it and we're not told what each data point is. Instead we're just told, here is a data set. Can you find some structure in the data? Given this data set, an Unsupervised Learning algorithm might decide that the data lives in two different clusters. And so there's one cluster <br/>
所以在无监督学习中 我们只有一个数据集 没人告诉我们该怎么做 我们也不知道 每个数据点究竟是什么意思 相反 它只告诉我们 现在有一个数据集 你能在其中找到某种结构吗? 对于给定的数据集 无监督学习算法可能判定 该数据集包含两个不同的聚类 你看 这是第一个聚类 <br/>
0:59<br/>
and there's a different cluster. <br/>
然后这是另一个聚类 <br/>
1:01<br/>
And yes, Supervised Learning algorithm may break these data into these two separate clusters. <br/>
你猜对了 无监督学习算法 会把这些数据分成两个不同的聚类 <br/>
1:06<br/>
So this is called a clustering algorithm. And this turns out to be used in many places. <br/>
所以这就是所谓的聚类算法 实际上它被用在许多地方 <br/>
1:11<br/>
One example where clustering is used is in Google News and if you have not seen this before, you can actually go to this URL news.google.com to take a look. What Google News does is everyday it goes and looks at tens of thousands or hundreds of thousands of new stories on the web and it groups them into cohesive news stories. <br/>
我们来举一个聚类算法的栗子 Google 新闻的例子 如果你还没见过这个页面的话 你可以到这个URL news.google.com 去看看 谷歌新闻每天都在干什么呢? 他们每天会去收集 成千上万的 网络上的新闻 然后将他们分组 组成一个个新闻专题 <br/>
1:30<br/>
For example, let's look here. <br/>
比如 让我们来看看这里 <br/>
1:33<br/>
The URLs here link to different news stories about the BP Oil Well story. <br/>
这里的URL链接 连接着不同的 有关BP油井事故的报道 <br/>
1:41<br/>
So, let's click on one of these URL's and we'll click on one of these URL's. What I'll get to is a web page like this. Here's a Wall Street Journal article about, you know, the BP Oil Well Spill stories of "BP Kills Macondo", which is a name of the spill and if you click on a different URL <br/>
所以 让我们点击 这些URL中的一个 恩 让我们点一个 然后我们会来到这样一个网页 这是一篇来自华尔街日报的 有关……你懂的 有关BP油井泄漏事故的报道 标题为《BP杀死了Macondo》 Macondo 是个地名 就是那个漏油事故的地方 如果你从这个组里点击一个不同的URL <br/>
2:00<br/>
from that group then you might get the different story. Here's the CNN story about a game, the BP Oil Spill, <br/>
那么你可能会得到不同的新闻 这里是一则CNN的新闻 是一个有关BP石油泄漏的视频 <br/>
2:07<br/>
and if you click on yet a third link, then you might get a different story. Here's the UK Guardian story about the BP Oil Spill. <br/>
如果你再点击第三个链接 又会出现不同的新闻 这边是英国卫报的报道 也是关于BP石油泄漏 <br/>
2:16<br/>
So what Google News has done is look for tens of thousands of news stories and automatically cluster them together. So, the news stories that are all about the same topic get displayed together. It turns out that clustering algorithms and Unsupervised Learning algorithms are used in many other problems as well. <br/>
所以 谷歌新闻所做的就是 去搜索成千上万条新闻 然后自动的将他们聚合在一起 因此 有关同一主题的 新闻被显示在一起 实际上 聚类算法和无监督学习算法 也可以被用于许多其他的问题 <br/>
2:35<br/>
Here's one on understanding genomics. <br/>
这里我们举个它在基因组学中的应用 <br/>
2:38<br/>
Here's an example of DNA microarray data. The idea is put a group of different individuals and for each of them, you measure how much they do or do not have a certain gene. Technically you measure how much certain genes are expressed. So these colors, red, green, gray and so on, they show the degree to which different individuals do or do not have a specific gene. <br/>
下面是一个关于基因芯片的例子 基本的思想是 给定一组不同的个体 对于每个个体 检测它们是否拥有某个特定的基因 也就是说,你要去分析有多少基因显现出来了 因此 这些颜色 红 绿 灰 等等 它们 展示了这些不同的个体 是否拥有一个特定基因 的不同程度 <br/>
3:02<br/>
And what you can do is then run a clustering algorithm to group individuals into different categories or into different types of people. <br/>
然后你能做的就是 运行一个聚类算法 把不同的个体归入不同的类 或归为不同类型的人 <br/>
3:10<br/>
So this is Unsupervised Learning because we're not telling the algorithm in advance that these are type 1 people, those are type 2 persons, those are type 3 persons and so on and instead what were saying is yeah here's a bunch of data. I don't know what's in this data. I don't know who's and what type. I don't even know what the different types of people are, but can you automatically find structure in the data from the you automatically cluster the individuals into these types that I don't know in advance? Because we're not giving the algorithm the right answer for the examples in my data set, this is Unsupervised Learning. <br/>
这就是无监督学习 我们没有提前告知这个算法 这些是第一类的人 这些是第二类的人 这些是第三类的人等等 相反我们只是告诉算法 你看 这儿有一堆数据 我不知道这个数据是什么东东 我不知道里面都有些什么类型 叫什么名字 我甚至不知道都有哪些类型 但是 请问你可以自动的找到这些数据中的类型吗? 然后自动的 按得到的类型把这些个体分类 虽然事先我并不知道哪些类型 因为对于这些数据样本来说 我们没有给算法一个 正确答案 所以 这就是无监督学习 <br/>
3:44<br/>
Unsupervised Learning or clustering is used for a bunch of other applications. <br/>
无监督学习或聚类算法在其他领域也有着大量的应用 <br/>
3:48<br/>
It's used to organize large computer clusters. <br/>
它被用来组织大型的计算机集群 <br/>
3:51<br/>
I had some friends looking at large data centers, that is large computer clusters and trying to figure out which machines tend to work together and if you can put those machines together, you can make your data center work more efficiently. <br/>
我有一些朋友在管理 大型数据中心 也就是 大型计算机集群 并试图 找出哪些机器趋向于 协同工作 如果你把这些机器放在一起 你就可以让你的数据中心更高效地工作 <br/>
4:04<br/>
This second application is on social network analysis. <br/>
第二种应用是用于社交网络的分析 <br/>
4:07<br/>
So given knowledge about which friends you email the most or given your Facebook friends or your Google+ circles, can we automatically identify which are cohesive groups of friends, also which are groups of people that all know each other? <br/>
所以 如果可以得知 哪些朋友你用email联系的最多 或者知道你的Facebook好友 或者你Google+里的朋友 知道了这些之后 我们是否可以自动识别 哪些是很要好的朋友组 哪些仅仅是互相认识的朋友组 <br/>
4:22<br/>
Market segmentation. <br/>
还有在市场分割中的应用 <br/>
4:24<br/>
Many companies have huge databases of customer information. So, can you look at this customer data set and automatically discover market segments and automatically <br/>
许多公司拥有庞大的客户信息数据库 那么 给你一个 客户数据集 你能否 自动找出不同的市场分割 <br/>
4:33<br/>
group your customers into different market segments so that you can automatically and more efficiently sell or market your different market segments together? <br/>
并自动将你的客户分到不同的 细分市场中 从而有助于我在 不同的细分市场中 进行更有效的销售 <br/>
4:44<br/>
Again, this is Unsupervised Learning because we have all this customer data, but we don't know in advance what are the market segments and for the customers in our data set, you know, we don't know in advance who is in market segment one, who is in market segment two, and so on. But we have to let the algorithm discover all this just from the data. <br/>
这也是无监督学习 我们现在有 这些客户数据 但我们预先并不知道 有哪些细分市场 而且 对于我们数据集的某个客户 我们也不能预先知道 谁属于细分市场一 谁又属于细分市场二等等 但我们必须让这个算法自己去从数据中发现这一切 <br/>
5:01<br/>
Finally, it turns out that Unsupervised Learning is also used for surprisingly astronomical data analysis and these clustering algorithms gives surprisingly interesting useful theories of how galaxies are formed. All of these are examples of clustering, which is just one type of Unsupervised Learning. Let me tell you about another one. I'm gonna tell you about the cocktail party problem. <br/>
最后 事实上无监督学习也被用于 天文数据分析 通过这些聚类算法 我们发现了许多 惊人的、有趣的 以及实用的 关于星系是如何诞生的理论 所有这些都是聚类算法的例子 而聚类只是无监督学习的一种 现在让我来告诉你另一种 我先来介绍一下鸡尾酒宴问题 <br/>
5:26<br/>
So, you've been to cocktail parties before, right? Well, you can imagine there's a party, room full of people, all sitting around, all talking at the same time and there are all these overlapping voices because everyone is talking at the same time, and it is almost hard to hear the person in front of you. So maybe at a cocktail party with two people, <br/>
恩 我想你参加过鸡尾酒会的 是吧? 嗯 想象一下 有一个宴会 有一屋子的人 大家都坐在一起 而且在同时说话 有许多声音混杂在一起 因为每个人都是在同一时间说话的 在这种情况下你很难听清楚你面前的人说的话 因此 比如有这样一个场景 宴会上只有两个人 <br/>
5:45<br/>
two people talking at the same time, and it's a somewhat small cocktail party. And we're going to put two microphones in the room so there are microphones, and because these microphones are at two different distances from the speakers, each microphone records a different combination of these two speaker voices. <br/>
两个人 同时说话 恩 这是个很小的鸡尾酒宴会 我们准备好了两个麦克风 把它们放在房间里 然后 因为这两个麦克风距离这两个人 的距离是不同的 每个麦克风都记录下了 来自两个人的声音的不同组合 <br/>
6:05<br/>
Maybe speaker one is a little louder in microphone one and maybe speaker two is a little bit louder on microphone 2 because the 2 microphones are at different positions relative to the 2 speakers, but each microphone would cause an overlapping combination of both speakers' voices. <br/>
也许A的声音 在第一个麦克风里的声音会响一点 也许B的声音 在第二个麦克风里会比较响一些 因为2个麦克风 的位置相对于 2个说话者的位置是不同的 但每个麦克风都会录到 来自两个说话者的重叠部分的声音 <br/>
6:23<br/>
So here's an actual recording <br/>
这里有一个 <br/>
6:26<br/>
of two speakers recorded by a researcher. Let me play for you the first, what the first microphone sounds like. One (uno), two (dos), three (tres), four (cuatro), five (cinco), six (seis), seven (siete), eight (ocho), nine (nueve), ten (y diez). <br/>
来自一个研究员录下的两个说话者的声音 让我先放给你听第一个 这是第一个麦克风录到的录音: 一 (UNO) 二 (DOS) 三 (TRES) 四 (CUATRO) 五 (CINCO) 六 (SEIS) 七 (SIETE) 八 (ocho) 九 (NUEVE) 十 (Y DIEZ) <br/>
6:41<br/>
All right, maybe not the most interesting cocktail party, there's two people counting from one to ten in two languages but you know. What you just heard was the first microphone recording, here's the second recording. <br/>
好吧 这大概不是什么有趣的酒会…… ……在这个酒会上 有两个人 各自从1数到10 但用的是两种不同语言 你刚才听到的是 第一个麦克风的录音 这里是第二个的: <br/>
6:57<br/>
Uno (one), dos (two), tres (three), cuatro (four), cinco (five), seis (six), siete (seven), ocho (eight), nueve (nine) y diez (ten). So we can do, is take these two microphone recorders and give them to an Unsupervised Learning algorithm called the cocktail party algorithm, and tell the algorithm - find structure in this data for you. And what the algorithm will do is listen to these audio recordings and say, you know it sounds like the two audio recordings are being added together or that have being summed together to produce these recordings that we had. Moreover, what the cocktail party algorithm will do is separate out these two audio sources that were being added or being summed together to form other recordings and, in fact, here's the first output of the cocktail party algorithm. <br/>
一 (UNO) 二 (DOS) 三 (TRES) 四 (CUATRO) 五 (CINCO) 六 (SEIS) 七 (SIETE) 八 (ocho) 九 (NUEVE) 十 (Y DIEZ) 所以 我们能做的就是把 这两个录音输入 一种无监督学习算法中 称为“鸡尾酒会算法” 让这个算法 帮你找出其中蕴含的分类 然后这个算法 就会去听这些 录音 并且你知道 这听起来像 两个音频录音 被叠加在一起 所以我们才能听到这样的效果 此外 这个算法 还会分离出 这两个被 叠加到一起的 音频源 事实上 这是我们的鸡尾酒会算法的第一个输出 <br/>
7:39<br/>
One, two, three, four, five, six, seven, eight, nine, ten. <br/>
一 二 三 四 五 六 七 八 九 十 <br/>
7:47<br/>
So, I separated out the English voice in one of the recordings. <br/>
所以我在一个录音中 分离出了英文声音 <br/>
7:52<br/>
And here's the second of it. Uno, dos, tres, quatro, cinco, seis, siete, ocho, nueve y diez. Not too bad, to give you <br/>
这是第二个输出 Uno dos tres quatro cinco seis siete ocho nueve y diez 听起来不错嘛 <br/>
8:03<br/>
one more example, here's another recording of another similar situation, here's the first microphone : One, two, three, four, five, six, seven, eight, nine, ten. <br/>
再举一个例子 这是另一个录音 也是在一个类似的场景下 这是第一个麦克风的录音: 一 二 三 四 五 六 七 八 九 十 <br/>
8:16<br/>
OK so the poor guy's gone home from the cocktail party and he 's now sitting in a room by himself talking to his radio. <br/>
OK 这个可怜的家伙从 鸡尾酒会回家了 他现在独自一人坐在屋里 对着录音机自言自语 <br/>
8:23<br/>
Here's the second microphone recording. <br/>
这是第二个麦克风的录音 <br/>
8:28<br/>
One, two, three, four, five, six, seven, eight, nine, ten. <br/>
一 二 三 四 五 六 七 八 九 十 <br/>
8:33<br/>
When you give these two microphone recordings to the same algorithm, what it does, is again say, you know, it sounds like there are two audio sources, and moreover, <br/>
当你把这两个麦克风录音 送给与刚刚相同的算法处理 它所做的还是 告诉你 这听起来有 两种音频源 并且 <br/>
8:42<br/>
the album says, here is the first of the audio sources I found. <br/>
算法说 这里是我找到的第一个音频源 <br/>
8:47<br/>
One, two, three, four, five, six, seven, eight, nine, ten. <br/>
一 二 三 四 五 六 七 八 九 十 <br/>
8:54<br/>
So that wasn't perfect, it got the voice, but it also got a little bit of the music in there. Then here's the second output to the algorithm. <br/>
恩 不是太完美 提取到了人声 但还有一点音乐没有剔除掉 这是算法的第二个输出 <br/>
9:10<br/>
Not too bad, in that second output it managed to get rid of the voice entirely. And just, you know, cleaned up the music, got rid of the counting from one to ten. <br/>
还好 在第二个输出中 它设法剔除掉了整个人声 只是清理了下音乐 剔除了从一到十的计数 <br/>
9:18<br/>
So you might look at an Unsupervised Learning algorithm like this and ask how complicated this is to implement this, right? It seems like in order to, you know, build this application, it seems like to do this audio processing you need to write a ton of code or maybe link into like a bunch of synthesizer Java libraries that process audio, seems like a really complicated program, to do this audio, separating out audio and so on. <br/>
所以 你可以看到 像这样的无监督学习算法 也许你想问 要实现这样的算法 很复杂吧? 看起来 为了 构建这个应用程序 做这个音频处理 似乎需要写好多代码啊 或者需要链接到 一堆处理音频的Java库 貌似需要一个 非常复杂的程序 分离出音频等 <br/>
9:42<br/>
It turns out the algorithm, to do what you just heard, that can be done with one line of code - shown right here. <br/>
实际上 要实现你刚刚听到的效果 只需要一行代码就可以了 写在这里呢 <br/>
9:50<br/>
It take researchers a long time to come up with this line of code. I'm not saying this is an easy problem, But it turns out that when you use the right programming environment, many learning algorithms can be really short programs. <br/>
当然 研究人员 花了很长时间才想出这行代码的 -^ 我不是说这是一个简单的问题 但事实上 如果你 使用正确的编程环境 许多学习 算法是用很短的代码写出来的 <br/>
10:03<br/>
So this is also why in this class we're going to use the Octave programming environment. <br/>
所以这也是为什么在 这门课中我们要 使用Octave的编程环境 <br/>
10:08<br/>
Octave, is free open source software, and using a tool like Octave or Matlab, many learning algorithms become just a few lines of code to implement. Later in this class, I'll just teach you a little bit about how to use Octave and you'll be implementing some of these algorithms in Octave. Or if you have Matlab you can use that too. <br/>
Octave是一个免费的 开放源码的软件 使用Octave或Matlab这类的工具 许多学习算法 都可以用几行代码就可以实现 在后续课程中 我会教你如何使用Octave 你会学到 如何在Octave中实现这些算法 或者 如果你有Matlab 你可以用它 <br/>
10:27<br/>
It turns out the Silicon Valley, for a lot of machine learning algorithms, what we do is first prototype our software in Octave because software in Octave makes it incredibly fast to implement these learning algorithms. <br/>
事实上 在硅谷 很多的机器学习算法 我们都是先用Octave 写一个程序原型 因为在Octave中实现这些 学习算法的速度快得让你无法想象 <br/>
10:38<br/>
Here each of these functions like for example the SVD function that stands for singular value decomposition; but that turns out to be a linear algebra routine, that is just built into Octave. <br/>
在这里 每一个函数 例如 SVD 意思是奇异值分解 但这其实是解线性方程 的一个惯例 它被内置在Octave软件中了 <br/>
10:49<br/>
If you were trying to do this in C++ or Java, this would be many many lines of code linking complex C++ or Java libraries. So, you can implement this stuff as C++ or Java or Python, it's just much more complicated to do so in those languages. <br/>
如果你试图 在C + +或Java中做这个 将需要写N多代码 并且还要连接复杂的C + +或Java库 所以 你可以在C++或 Java或Python中 实现这个算法 只是会 更加复杂而已 <br/>
11:03<br/>
What I've seen after having taught machine learning for almost a decade now, is that, you learn much faster if you use Octave as your programming environment, and if you use Octave as your learning tool and as your prototyping tool, it'll let you learn and prototype learning algorithms much more quickly. <br/>
在教授机器学习 将近10年后 我得出的一个经验就是 如果你使用Octave的话 会学的更快 并且如果你用 Octave作为你的学习工具 和开发原型的工具 你的学习和开发过程 会变得更快 <br/>
11:22<br/>
And in fact what many people will do to in the large Silicon Valley companies is in fact, use an algorithm like Octave to first prototype the learning algorithm, and only after you've gotten it to work, then you migrate it to C++ or Java or whatever. It turns out that by doing things this way, you can often get your algorithm to work much faster than if you were starting out in C++. <br/>
而事实上在硅谷 很多人会这样做 他们会先用Octave 来实现这样一个学习算法原型 只有在确定 这个算法可以工作后 才开始迁移到 C++ Java或其它编译环境 事实证明 这样做 实现的算法 比你一开始就用C++ 实现的算法要快多了 <br/>
11:44<br/>
So, I know that as an instructor, I get to say "trust me on this one" only a finite number of times, but for those of you who've never used these Octave type programming environments before, I am going to ask you to trust me on this one, and say that you, you will, I think your time, your development time is one of the most valuable resources. <br/>
所以 我知道 作为一个老师 我不能老是念叨: “在这个问题上相信我“ 但对于 那些从来没有用过这种 类似Octave的编程环境的童鞋 我还是要请你 相信我这一次 我认为 你的时间 研发时间 是你最宝贵的资源之一 <br/>
12:04<br/>
And having seen lots of people do this, I think you as a machine learning researcher, or machine learning developer will be much more productive if you learn to start in prototype, to start in Octave, in some other language. <br/>
当见过很多的人这样做以后 我觉得如果你也这样做 作为一个机器学习的 研究者和开发者 你会更有效率 如果你学会先用Octave开发原型 而不是先用其他的编程语言来开发 <br/>
12:17<br/>
Finally, to wrap up this video, I have one quick review question for you. <br/>
最后 总结一下 这里有一个问题需要你来解答 <br/>
12:24<br/>
We talked about Unsupervised Learning, which is a learning setting where you give the algorithm a ton of data and just ask it to find structure in the data for us. Of the following four examples, which ones, which of these four do you think would will be an Unsupervised Learning algorithm as opposed to Supervised Learning problem. For each of the four check boxes on the left, check the ones for which you think Unsupervised Learning algorithm would be appropriate and then click the button on the lower right to check your answer. So when the video pauses, please answer the question on the slide. <br/>
我们谈到了无监督学习 它是一种学习机制 你给算法大量的数据 要求它找出数据中 蕴含的类型结构 以下的四个例子中 哪一个 您认为是 无监督学习算法 而不是监督学习问题 对于每一个选项 在左边的复选框 选中你认为 属于无监督学习的 选项 然后按一下右下角的按钮 提交你的答案 所以 当视频暂停时 请回答幻灯片上的这个问题 <br/>
13:01<br/>
So, hopefully, you've remembered the spam folder problem. If you have labeled data, you know, with spam and non-spam e-mail, we'd treat this as a Supervised Learning problem. <br/>
恩 没忘记垃圾邮件文件夹问题吧? 如果你已经标记过数据 那么就有垃圾邮件和 非垃圾邮件的区别 我们会将此视为一个监督学习问题 <br/>
13:11<br/>
The news story example, that's exactly the Google News example that we saw in this video, we saw how you can use a clustering algorithm to cluster these articles together so that's Unsupervised Learning. <br/>
新闻故事的例子 正是我们在本课中讲到的 谷歌新闻的例子 我们介绍了你可以如何使用 聚类算法这些文章聚合在一起 所以这是无监督学习问题 <br/>
13:23<br/>
The market segmentation example I talked a little bit earlier, you can do that as an Unsupervised Learning problem because I am just gonna get my algorithm data and ask it to discover market segments automatically. <br/>
市场细分的例子 我之前有说过 这也是一个无监督学习问题 因为我是要 拿到数据 然后要求 它自动发现细分市场 <br/>
13:35<br/>
And the final example, diabetes, well, that's actually just like our breast cancer example from the last video. Only instead of, you know, good and bad cancer tumors or benign or malignant tumors we instead have diabetes or not and so we will use that as a supervised, we will solve that as a Supervised Learning problem just like we did for the breast tumor data. <br/>
最后一个例子 糖尿病 这实际上就像我们 上节课讲到的乳腺癌的例子 只不过这里不是 好的或坏的癌细胞 良性或恶性肿瘤我们 现在是有糖尿病或 没有糖尿病 所以这是 有监督的学习问题 像处理那个乳腺癌的问题一样 我们会把它作为一个 有监督的学习问题来处理 <br/>
13:58<br/>
So, that's it for Unsupervised Learning and in the next video, we'll delve more into specific learning algorithms and start to talk about just how these algorithms work and how we can, how you can go about implementing them.<br/>
好了 关于无监督学习问题 就讲这么多了 下一节课中我们 会涉及到更具体的学习算法 并开始讨论 这些算法是如何工作的 以及我们如何来实现它们 【教育无边界字幕组】翻译:碳老师 校对:linuxfish 审核:所罗门捷列夫</p>
</div>
</div>
</a>
<div class="read-more clearfix">
<div class="more-left left">
<span class="date">2017/3/9 22:44 下午</span>
<span>posted in </span>
<span class="posted-in"><a href='python.html'>python</a></span>
</div>
<div class="more-right right">
<span class="comments">
<a class="ds-thread-count" data-thread-key="14890706857877.html" data-count-type="comments" href="14890706857877.html#ds-thread"></a>
</span>
</div>
</div>
</div><!-- article -->
<div class="article">
<a class="clearlink" href="14850124799483.html">
<h1>计算机编码与python编码</h1>
<div class="a-content">
<div class="a-content-text">
<h2 id="toc_0">编码</h2>
<h3 id="toc_1">ASCII</h3>
<blockquote>
<p>计算机发明时,美国人只考虑了英语,所以当时的ASCII编码只有8个比特,即1个字节.大小英文字母/数字/标点符号/特殊符号等127个字母被纳入并规范成了ASCII编码.</p>
</blockquote>
<h3 id="toc_2">Unicode(Universal Multiple-Octet Coded Character Set)</h3>
<blockquote>
<p>ASCII编码只适用于英语国家,所以后来百家争鸣,中国有<strong>GB2312</strong>编码,韩国/日本等也都自制编码.就这样,冲突来了.<br/>
为了解决冲突,Unicode编码被协商制定出来.将世界上所有语言字符都编码成一个数字.<br/>
Unicode字符码是32位,4个字节。</p>
</blockquote>
<h3 id="toc_3">UTF-8</h3>
<blockquote>
<p>Unicode编码虽然兼容ASCII,但是会产生极大的浪费,Double了.所以才出现了把Unicode编码转化为<em>可变长编码</em>的UTF-8编码.UTF-8编码氢一个Unicode字符根据不同的数字大小编码成1-6个字节.英文字母1个字节,汉字通常3字节,生僻字4-6字节.<br/>
一般情况均传输的是英文字母(都是代码).</p>
</blockquote>
<h2 id="toc_4">计算机内存编码</h2>
<blockquote>
<p>早期Unicode编码就是16位2字节定长.但是中国文化5千年,文字太多,居然超过了65536个.So,Unicode就从定长走向了不定长的道路.<br/>
计算机处理文本的时候,内存中一般都不用UTF-8。因为UTF-8是变长编码,不从头扫描一遍,你不知道第几个字符在哪个位置上,这在处理的时候非常浪费时间。现在很多语言/程序的处理办法,是使用源于原始UTF-16的一个定长编码,只处理字符码在16位以内的字符,不支持超过16位的罕见字。这种16位定长的编码方式被称为UCS-2。那些零星的几个突破16位的字符,除非你专门研究古文或者奇怪的小语种,一般来说是遇不到的。遇到了也是黑人问号脸。<br/>
解决办法:不怕浪费空间的,就用UTF-32,不怕浪费处理时间的,就用完整的UTF-16,或者索性用UTF-8。</p>
</blockquote>
<h2 id="toc_5">python编码</h2>
<p>在python2中,<code>'xxx'</code>和<code>u'xxx'</code>是完全不一样的.前者是UTF-8编码的,也同ASCII编码,后者是Unicode编码.<br/>
Unicode转UTF-8编码:<br/>
<code>u'aaa'.encode('utf-8')</code><br/>
UTF-8转Unicode编码:<br/>
<code>'中国'.decode('utf-8')</code><br/>
输入中文编码前提:<br/>
<code># -*- coding: utf-8 -*-</code></p>
<p>在python3中,<code>'xxx'</code>和<code>u'xxx'</code>都是Unicode编码.</p>
</div>
</div>
</a>
<div class="read-more clearfix">
<div class="more-left left">
<span class="date">2017/1/21 23:27 下午</span>
<span>posted in </span>
<span class="posted-in"><a href='python.html'>python</a></span>
</div>
<div class="more-right right">
<span class="comments">
<a class="ds-thread-count" data-thread-key="14850124799483.html" data-count-type="comments" href="14850124799483.html#ds-thread"></a>
</span>
</div>
</div>
</div><!-- article -->
<div class="article">
<a class="clearlink" href="14848778197605.html">
<h1>使用python搭建ss梯子</h1>
<div class="a-content">
<div class="a-content-text">
<h2 id="toc_0">CentOS7</h2>
<pre><code class="language-sh">yum install python-setuptools && easy_install pip
pip install shadowsocks
</code></pre>
<h2 id="toc_1">启动命令</h2>
<pre><code class="language-sh">ssserver -p 8836 -k `password` -m rc4-md5
#或者可以通过以下指令在后台启动shadowsocks的服务:
ssserver -p 8836 -k `password` -m rc4-md5 -d start
ssserver -p 8836 -k `password` -m rc4-md5 -d stop
</code></pre>
<p><strong>优化版本</strong><br/>
* 创建/etc/shadownsocks.json配置文件<br/>
* 写入配置:</p>
<pre><code class="language-sh">{
"server":"你的服务器ip地址",
"server_port":10088,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"你设置的密码",
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false
}
</code></pre>
<p>优化后的启动命令:</p>
<pre><code class="language-sh">ssserver -c /etc/shadowsocks.json
#或者在后台运行
ssserver -c /etc/shadowsocks.json -d start
ssserver -c /etc/shadowsocks.json -d stop
</code></pre>
</div>
</div>
</a>
<div class="read-more clearfix">
<div class="more-left left">
<span class="date">2017/1/20 10:3 上午</span>
<span>posted in </span>
<span class="posted-in"><a href='python.html'>python</a></span>
</div>
<div class="more-right right">
<span class="comments">
<a class="ds-thread-count" data-thread-key="14848778197605.html" data-count-type="comments" href="14848778197605.html#ds-thread"></a>
</span>
</div>
</div>
</div><!-- article -->
<div class="article">
<a class="clearlink" href="14848776957351.html">
<h1>金山翻译&时间的workflow</h1>
<div class="a-content">
<div class="a-content-text">
<h2 id="toc_0">项目链接</h2>
<p><a href="https://github.com/star1989/star_workflow">https://github.com/star1989/star_workflow</a></p>
<h2 id="toc_1">金山翻译</h2>
<h3 id="toc_2"><strong>功能:</strong></h3>
<ul>
<li>中英文翻译</li>
<li>音标</li>
<li>发音(<strong><em>默认美式</em></strong>)</li>
<li>复制(当前选中行文本,内容分为:音标,释意几行展示,可以自由复制)
<ul>
<li>注:复制的同时都会有读音</li>
<li>复制示例:<code>am:[stɑr] ,en:[stɑ:(r)]</code></li>
</ul></li>
<li>添加单词HOOK</li>
</ul>
<h3 id="toc_3">按键</h3>
<p><em>dc</em></p>
<blockquote>
<p>对应中文的单词,而且也离左手近,比较方便(主要是懒)</p>
</blockquote>
<h3 id="toc_4">效果</h3>
<ul>
<li><p>英文翻译<br/>
<img src="http://bimg.cxstars.com/2017-01-20-14848765913701.jpg" alt="英文翻译截图"/></p></li>
<li><p>中文翻译<br/>
<img src="http://bimg.cxstars.com/2017-01-21-14850042653066.jpg" alt="中文翻译截图"/></p></li>
<li><p>添加单词HOOK<br/>
<img src="http://bimg.cxstars.com/2017-01-25-14853523310481.jpg" alt="添加单词HOOK图"/></p></li>
<li><p>添加单词通知<br/>
<img src="http://bimg.cxstars.com/2017-01-25-14853524781043.jpg" alt="添加单词通知"/></p></li>
</ul>
<h3 id="toc_5">金山API</h3>
<p>项目里我已经放上我自己的API KEY,方便跟我一样懒的道友们.<br/>
不过也建议大家自行申请,非常方便.<a href="http://open.iciba.com/?c=api">金山词霸API</a><br/>
修改文件<code>jsfy.py</code>:<br/>
<code>app_key = "put your api key"</code></p>
<h2 id="toc_6">time</h2>
<h3 id="toc_7">显示时间相关的信息:日期,时间,周几,今天是一年中的多少天,本周是一年中的多少周</h3>
<h3 id="toc_8">按键</h3>
<p><em>now</em></p>
<blockquote>
<p>为了节约mac上状态的位置,而且可以通过workflow快速的复制当天的时间信息,方便我懒得输TODO里的日期之类的.同时也提醒自己时间飞快,惜时务事.</p>
</blockquote>
<h3 id="toc_9">效果</h3>
<p><img src="http://bimg.cxstars.com/2017-02-01-%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202017-02-01%2020.57.39.png" alt="now截图"/></p>
<h2 id="toc_10">参考资料</h2>
<ul>
<li><a href="http://www.deanishe.net/alfred-workflow/">Alfred-Workflow Python</a></li>
<li><a href="https://www.alfredapp.com/help/workflows/">Alfred office help</a></li>
</ul>
<h2 id="toc_11">ToDoList</h2>
<ul>
<li>金山翻译
<ul>
<li><del>添加单词到单词本(v1.3:2017-01-25)</del></li>
<li><del>中翻英(v1.1:2017-01-21)</del></li>
<li><del>单词顺序列表/当天应记单词列表API(2017-02-01)</del></li>
<li>安卓单词APP</li>
<li>每日一句</li>
</ul></li>
<li>time
<ul>
<li>历史上的今天</li>
</ul></li>
</ul>
</div>
</div>
</a>
<div class="read-more clearfix">
<div class="more-left left">
<span class="date">2017/1/20 10:1 上午</span>
<span>posted in </span>
<span class="posted-in"><a href='python.html'>python</a></span>
</div>
<div class="more-right right">
<span class="comments">
<a class="ds-thread-count" data-thread-key="14848776957351.html" data-count-type="comments" href="14848776957351.html#ds-thread"></a>
</span>
</div>
</div>
</div><!-- article -->
<div class="article">
<a class="clearlink" href="14842902733244.html">
<h1>python语法总结</h1>
<div class="a-content">
<div class="a-content-text">
<h2 id="toc_0">变量</h2>
<h3 id="toc_1">命令规则</h3>
<ul>
<li>必须是大小写英文,数字和_的组合,且不能用数字开头</li>
<li>不用声明,直接使用(同PHP)</li>
</ul>
<h3 id="toc_2">类型</h3>
<ul>
<li>整数</li>
<li>浮点</li>
<li>字符串</li>
<li>布尔</li>
<li>空: None (与0不同)</li>
<li>Tuple : 元组,值不可变更</li>
<li>List : 表,值可以变更[下限:上限:步长]</li>
<li>Dictionary : 字典</li>
<li>自定义数据类型</li>
</ul>
<h2 id="toc_3">语法</h2>
<h3 id="toc_4">缩进</h3>
<p>python强制使用缩进来解析块代码.</p>
<h3 id="toc_5">运算符</h3>
<ul>
<li>数学 : <code>+,-,*,/,**,%</code></li>
<li>判断 : <code>==,!=,>,>=,<,<=,in</code></li>
<li>逻辑 : <code>and,or,not</code></li>
</ul>
<h3 id="toc_6">条件语句</h3>
<pre><code class="language-python">if condition1:
do1
elif condition2:
do2
elif condition3:
do3
else:
do4
</code></pre>
<h3 id="toc_7">循环</h3>
<p><strong>for</strong></p>
<pre><code class="language-python">for elemnt in list:
statment
</code></pre>
<p><strong>while</strong></p>
<pre><code class="language-python">while condition:
statement
</code></pre>
<p><strong>continue</strong><br/>
<strong>break</strong></p>
</div>
</div>
</a>
<div class="read-more clearfix">
<div class="more-left left">
<a href="14842902733244.html">Read more</a>
<span class="date">2017/1/13 14:51 下午</span>
<span>posted in </span>
<span class="posted-in"><a href='python.html'>python</a></span>
</div>
<div class="more-right right">
<span class="comments">
<a class="ds-thread-count" data-thread-key="14842902733244.html" data-count-type="comments" href="14842902733244.html#ds-thread"></a>
</span>
</div>
</div>
</div><!-- article -->
<div class="row">
<div class="large-6 columns">
<p class="text-left" style="padding-top:25px;">
</p>
</div>
<div class="large-6 columns">
<p class="text-right" style="padding-top:25px;">
</p>
</div>
</div>
</div>
</div><!-- large 8 -->
<div class="large-4 medium-4 columns">
<div class="hide-for-small">
<div id="sidebar" class="sidebar">
<div id="site-info" class="site-info">
<div class="site-a-logo"><img src="asset/img/cx_logo.png" /></div>
<h1>星晨入梦</h1>
<div class="site-des">life&code</div>
<div class="social">
<a target="_blank" class="github" target="_blank" href="https://github.com/star1989" title="GitHub">GitHub</a>
<a target="_blank" class="rss" href="atom.xml" title="RSS">RSS</a>
</div>
</div>
<div id="site-categories" class="side-item ">
<div class="side-header">
<h2>Categories</h2>
</div>
<div class="side-content">
<p class="cat-list">
<a href="ml.html"><strong>ml</strong></a>
<a href="MySQL.html"><strong>MySQL</strong></a>
<a href="python.html"><strong>python</strong></a>
<a href="nginx.html"><strong>nginx</strong></a>
<a href="golang.html"><strong>golang</strong></a>
<a href="book.html"><strong>book</strong></a>
<a href="arch.html"><strong>arch</strong></a>
<a href="redis.html"><strong>redis</strong></a>
<a href="life.html"><strong>life</strong></a>
<a href="php.html"><strong>php</strong></a>
</p>
</div>
</div>
<div id="site-categories" class="side-item">
<div class="side-header">
<h2>Recent Posts</h2>
</div>
<div class="side-content">
<ul class="posts-list">
<li class="post">
<a href="14900171104128.html">TensorFlow安装</a>
</li>
<li class="post">
<a href="14899316488389.html">一篇上了头条的文章感想</a>
</li>
<li class="post">
<a href="14897253436771.html">How to Chose A Restful Api Http Status Code</a>
</li>
<li class="post">
<a href="14894790545658.html">设计模式原则</a>
</li>
<li class="post">
<a href="14893113007289.html">PHP PDO深入探索</a>
</li>
</ul>
</div>
</div>
</div><!-- sidebar -->
</div><!-- hide for small -->
</div><!-- large 4 -->
</div><!-- row -->
<div class="page-bottom clearfix">
<div class="row">
<p class="copyright">Copyright © 2015
Powered by <a target="_blank" href="http://www.mweb.im">MWeb</a>,
Theme used <a target="_blank" href="http://github.com">GitHub CSS</a>.</p>
</div>
</div>
</section>
</div>
</div>
<script type="text/javascript">
var duoshuoQuery = {short_name:'chenxin1989'};
(function() {
var ds = document.createElement('script');
ds.type = 'text/javascript';ds.async = true;
ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js';
ds.charset = 'UTF-8';
(document.getElementsByTagName('head')[0]
|| document.getElementsByTagName('body')[0]).appendChild(ds);
})();
</script>
<script src="asset/js/foundation.min.js"></script>
<script>
$(document).foundation();
function fixSidebarHeight(){
var w1 = $('.markdown-body').height();
var w2 = $('#sidebar').height();
if (w1 > w2) { $('#sidebar').height(w1); };
}
$(function(){
fixSidebarHeight();
})
$(window).load(function(){
fixSidebarHeight();
});
</script>
<script src="asset/chart/all-min.js"></script><script type="text/javascript">$(function(){ var mwebii=0; var mwebChartEleId = 'mweb-chart-ele-'; $('pre>code').each(function(){ mwebii++; var eleiid = mwebChartEleId+mwebii; if($(this).hasClass('language-sequence')){ var ele = $(this).addClass('nohighlight').parent(); $('<div id="'+eleiid+'"></div>').insertAfter(ele); ele.hide(); var diagram = Diagram.parse($(this).text()); diagram.drawSVG(eleiid,{theme: 'simple'}); }else if($(this).hasClass('language-flow')){ var ele = $(this).addClass('nohighlight').parent(); $('<div id="'+eleiid+'"></div>').insertAfter(ele); ele.hide(); var diagram = flowchart.parse($(this).text()); diagram.drawSVG(eleiid); } });});</script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script type="text/x-mathjax-config">MathJax.Hub.Config({TeX: { equationNumbers: { autoNumber: "AMS" } }});</script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?b65a52970ddc989d3f85c97f61de0c39";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</body>
</html>