精华内容
下载资源
问答
  • 专业治疗选择困难症----帮你做选择

    千次阅读 2016-05-09 16:11:30
    很多时候都会遇到让人纠结的事情,比如什么了不什么的了。都说抛硬币很有效,并不是因为抛硬币的结果,而是在硬币抛出的那一瞬间,心中到底想要什么就已经很明显了。但是咧,不可能随身都带着一枚硬币吧。于是有...

    很多时候都会遇到让人纠结的事情,比如做什么了不做什么的了。都说抛硬币很有效,并不是因为抛硬币的结果,而是在硬币抛出的那一瞬间,心中到底想要什么就已经很明显了。但是咧,不可能随身都带着一枚硬币吧。于是有了下面的这个小小的软件。


    核心算法

    哈,这里并不能说是核心算法吧。毕竟不是自己的。就是一个产生随机数的算法。让我们来追踪一下吧。

    //第一步:入口之Math.random()
    Math.random();
    //第二步:进入random的内部
    public static double random() {
            return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
        }
    //第三步:深入下去
     public double nextDouble() {
            return (((long)(next(26)) << 27) + next(27)) * DOUBLE_UNIT;
        }
    //第四步:继续研究
      private static final double DOUBLE_UNIT = 0x1.0p-53; // 1.0 / (1L << 53)

    这样,我们就追踪完成了,Java自带的随机算法的原理了吧。是的,就是这一些列的左移操作,使得我们可以如愿获得一个较为合理的随机数。当然了,直接的随机数是一个double类型的数据,我们不能直接进行使用,要进行相关的转换才行。

    这个小程序的思路

    说是思路,其实也就是每一步都完成了些什么。
    这里我使用了awt包来实现界面的搭建,然后使用了一个列表作为选项的容器,再加上一些自定义的方法来实现的。

    功能描述:
    在主界面可以进行获取随机结果,然后通过点击添加按钮进入到添加自定义的菜单的效果。添加的时候会置顶最新的选项,回车或者点击添加按钮都可以完成添加。点击完成就可以回到主界面继续帮你做选择咯。

    我的源码

    package tools;
    
    import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.Color;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.Frame;
    import java.awt.Label;
    import java.awt.Panel;
    import java.awt.TextArea;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.swing.JOptionPane;
    
    /**
     * 日期: 2016年5月6日9:36:53
     * 
     * 功能描述:一个简单的Java AWT小程序,可以手动的添加可选项,随机的帮助自己做出选择
     * 
     * 算法:利用了Java自带的随机算法实现的对于列表List中元素的随机选择
     * 
     * @author Administrator
     *
     */
    public class ChooseHelper {
    
        /**
         * 实现的思路: 首先是一个展示的主界面,用于展示结果以及用户的交互操作,当点击添加按钮的时候会自动的弹出一个添加界面
         * 在添加界面中,用户既可以浏览到原有的选项,也可以实时的看到新添加的选项(这里把新添加的选项置顶了,方便用户观察)
         * 在点击“完成”按钮后即可回到原主界面,进行新的随机事件的结果获取。
         * 
         * 注意: 这里没有采用分层的设计是因为,程序太小,分层的话显得过于的繁琐。
         * 对于布局和各种侦听事件的设置也没有一个详细的步骤,应该尽量的减少冗余代码的存在。
         */
        public ChooseHelper() {
            Frame frame = new Frame();
            frame.setTitle("帮我做选择");
            List<String> list = new ArrayList<String>();
            list.add("再来一次!");
            Label label = new Label("", Label.CENTER);
            label.setFont(new Font("Arial Bold", Font.ITALIC, 32));
            label.setForeground(Color.decode("#00FFFF"));
            frame.setLayout(new BorderLayout());
            frame.add(label, BorderLayout.CENTER);
            Panel panel = new Panel(new FlowLayout());
            Button addItem = new Button("添加项");
            Button doItem = new Button("随机一下");
            panel.add(addItem);
            panel.add(doItem);
            frame.add(panel, BorderLayout.SOUTH);
            frame.setVisible(true);
            frame.setSize(400, 300);
            frame.setLocationRelativeTo(null);
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    
            /**
             * 点击这个按钮弹出一个添加备选项的界面
             */
            addItem.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Frame addFrame = new Frame();
                    addFrame.setTitle("添加备选项");
                    addFrame.setVisible(true);
                    addFrame.setSize(400, 300);
                    addFrame.setLocationRelativeTo(null);
                    addFrame.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                            addFrame.setVisible(false);
                            addFrame.dispose();
                        };
                    });
    
                    TextArea ta = new TextArea();
                    ta.setEditable(false);
                    ta.setFocusable(false);
                    refreshList(ta, list);
    
                    addFrame.add(ta, BorderLayout.CENTER);
                    Panel bottom = new Panel(new FlowLayout());
                    TextField tf = new TextField(28);
                    Button addTf = new Button("添加这个内容");
                    Button complete = new Button("完成");
                    bottom.add(tf);
                    bottom.add(addTf);
                    bottom.add(complete);
    
                    tf.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            String item = tf.getText().toString();
                            if (item != null && !item.equals("")) {
                                list.add(0, item);
                                tf.setText("");
                                refreshList(ta, list);
                            } else {
                                JOptionPane.showMessageDialog(null, "请输入您要进行的活动!");
                            }
                        }
                    });
                    addFrame.add(bottom, BorderLayout.SOUTH);
                    complete.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            addFrame.setVisible(false);
                            addFrame.dispose();
                        }
                    });
                    addTf.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            String item = tf.getText().toString();
                            if (item != null && !item.equals("")) {
                                list.add(0, item);
                                tf.setText("");
                                refreshList(ta, list);
                            } else {
                                JOptionPane.showMessageDialog(null, "请输入您要进行的活动!");
                            }
                        }
                    });
                }
    
                /**
                 * 将刷新list的任务抽取出来,便于每一次的结果的刷新显示。
                 * 
                 * @param ta
                 *            用于显示刷新后的结果
                 * @param list
                 *            将list中的内容刷新到上面的容器TextArea中
                 */
                private void refreshList(TextArea ta, List<String> list) {
                    ta.setText("");
                    for (int i = 0; i < list.size(); i++) {
                        ta.append(list.get(i) + "\n");
                    }
                }
            });
    
            doItem.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    int length = list.size();
                    label.setText(list.get((int) (Math.random() * length)));
                }
            });
        }
    
        /**
         * 主程序的入口,测试一下程序的运行结果
         * 
         * @param args
         */
        public static void main(String[] args) {
            ChooseHelper helper = new ChooseHelper();
    
        }
    
    }
    

    回头总结

    这里实现的逻辑还是比较清晰的,由于代码量很小。所以没有进行分层,而且很多重复的代码没有抽取到一个方法中,这是不好的地方,希望大家不要这么做,尽量的以面向对象的思想进行模块化的编程。

    然后就是展望吧。其实这个程序中有很多的地方可以进行完善的,比如说在添加菜单项的时候我们可能不想一个一个的进行添加。我们就可以使用一个文件选择器,来从一个本地的文件中进行读取嘛。XML文件或者是文本文件或者是数据库中啊网络上啊什么的都是可以的,所以这样一来就需要写好较为底层的DAO层处理了。实现起来也不会很难。

    程序运行结果展示

    这里写图片描述
    这里写图片描述
    这里写图片描述

    展开全文
  • libsvm中如何特征选择

    千次阅读 2016-01-26 20:36:04
    上一篇论文被审稿人说特征选择是在交叉验证的外部的,存在过拟合的问题。所以这一次花了几天的时间弄清楚了交叉验证,libsvm和特征选择三者的关系。 首先libsvm内部是不包含特征选择的。libsvm的model.SV参数是把...

    上一篇论文被审稿人说特征选择是在交叉验证的外部做的,存在过拟合的问题。所以这一次花了几天的时间弄清楚了交叉验证,libsvm和特征选择三者的关系。

    首先libsvm内部是不包含特征选择的。libsvm的model.SV参数是把特征进行了一个区域的标准化,把所有的特征都压缩到一个范围内(默认的应该是[1,-1])。并不是每个样本特征的权重值。在2006年林林智仁教授的一篇文章中对于如何把libsvm和特征选择方法结合起来有了些了解。(本文的方法和图片都摘自这篇文章)1

    文章中涉及到的特征选择的方法个人感觉是Embedded方法大类,除此之外还有Filter方法大类和Wrapper方法大类。文中介绍了三种方法F-scroe+SVM,F-score+RF+SVM,RF+RM-SVM。

    1、F-score+SVM方法

    算F值选取几个肉眼可见区别的F值域,然后分别去掉超出域的特征;把数据随机分成训练集合和验证集合,对每个subfeatures训练svm,之后再检验,重复五次,得到一个平均正确率值;进行比较得到最好的一个作为整个实验的特征选择程序;再用确定好的特征训练svm模型,来预测。

    2、F-score+RF+SVM方法

    这个方法是说随机森林除了可以做分类以外,也可以提供特征的重要程度。但是RF方法不能处理太多的特征,因此在使用RF之前需要按照第一个方法用F-score先做一下预筛选(感觉这个方法太拖沓了,做两次特征的筛选)。

    参考上一个方法得到subfeatures;用RF来对所有训练集合进行处理得到特征子集的排序(how?之后再查);用RF来做5重交叉验证;之后去掉一半的不是特别重要的特征,然后重复上一步,这样循环,直到特征的数量很少了为止(什么算少?并没有给出具体值啊);上面这两步循环很多次,最后选取正确率最高的对应的特征值为准。

    3、RF+RM-SVM方法

    这个方法认为RBF核可以自己进行特征的筛选,因此通过最小化特征的泛化误差来得到特征的重要程度,然后用loo,之后一个平滑的函数来约束边缘,称为radius margin (RM),因此这个方法称为RM-SVM。在做之前需要RF方法进行预筛选。所以这个方法不能用于特征特别多的预测,因此作者在实现的时候只在最后一个样本上进行了实现。

    之后是一个各种方法实现的错误率(BER)对比的表:


    样本特征情况


    这是作者参加一个NIPS的比赛做的,林教授最后是第三名,这是他的结果和第一名结果的对比图:


    对此表我有两个疑问,之后再查一下。1、Score,Feat,Probe是如何计算的?2、正确率这么高真的好么,给大神跪了,是我之前做的太渣,还是有特殊的优化方法?

    另外,抛开这篇文章,由于libsvm的SVMtrain如果加上了-v 5,那得到的就只是一个正确率值。如果是用五重交叉验证的正确率值作为模型好坏的评判标准,那如何画ROC,中间的数据又没有给出,还是说要向F-score+SVM方法中的,随机分成两份,一份预测模型,另外一份来做ROC,ACC?

    这些问题先记录下来,慢慢查。第一篇CSDN博文,个人学习的记录。哪里错了,看到的大神望指点一下。

    参考文献:

    Chen Y W, Lin C J. Combining SVMs with various feature selection strategies[M]//Feature extraction. Springer Berlin Heidelberg, 2006: 315-324.

    展开全文
  • RF、GBDT、XGboost都可以特征选择,属于特征选择中的嵌入式方法。比如在sklearn中,可以用属性feature_importances_去查看特征的重要度, 比如: from sklearn import ensemble #grd = ensemble....

    RF、GBDT、XGboost都可以做特征选择,属于特征选择中的嵌入式方法。比如在sklearn中,可以用属性feature_importances_去查看特征的重要度, 比如:

    from sklearn import ensemble
    #grd = ensemble.GradientBoostingClassifier(n_estimators=30)
    grd = ensemble.RandomForestClassifier(n_estimators=30)
    grd.fit(X_train,y_train)
    grd.feature_importances_


      但是这三个分类器是如何计算出特征的重要度呢?下面来分别的说明一下。

    1. 随机森林(Random Forest)

        用袋外数据 (OOB) 做预测。随机森林在每次重抽样建立决策树时,都会有一些样本没有被选中,那么就可以用这些样本去做交叉验证,这也是随机森林的优点之一。它可以不用做交叉验证,直接用oob _score_去对模型性能进行评估。

        具体的方法就是:

            1. 对于每一棵决策树,用OOB 计算袋外数据误差,记为 errOOB1;

            2. 然后随机对OOB所有样本的特征i加入噪声干扰,再次计算袋外数据误差,记为errOOB2;

            3. 假设有N棵树,特征i的重要性为sum(errOOB2-errOOB1)/N;

        如果加入随机噪声后,袋外数据准确率大幅下降,说明这个特征对预测结果有很大的影响,进而说明它的重要程度比较高

    2. 梯度提升树(GBDT)

        主要是通过计算特征i在单棵树中重要度的平均值,计算公式如下:

    其中,M是树的数量。特征i在单棵树的重要度主要是通过计算按这个特征i分裂之后损失的减少值

    其中,L是叶子节点的数量,L-1就是非叶子结点的数量。

    3. XGboost

        XGboost是通过该特征每棵树中分裂次数的和去计算的,比如这个特征在第一棵树分裂1次,第二棵树2次……,那么这个特征的得分就是(1+2+...)。


    --------------------- 
    作者:phoebe寻常 
    来源:CSDN 
    原文:https://blog.csdn.net/u014035615/article/details/79612827 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 使用随机森林特征选择

    千次阅读 2018-07-04 17:48:12
    使用随机森林训练模型 from sklearn.ensemble import RandomForestClassifier feat_lables = trainx.columns forest = RandomForestClassifier(n_estimators=10000, random_state=0,n_jobs=1) ...

    使用随机森林训练模型

    from sklearn.ensemble import RandomForestClassifier
    feat_lables = trainx.columns
    forest = RandomForestClassifier(n_estimators=10000, random_state=0,n_jobs=1)
    forest.fit(trainx, trainy)
    importance = forest.feature_importances_
    imp_result = np.argsort(importance)[::-1]
    imp_result [0:5]
    

    输出特征排序

    for i in range(trainx.shape[1]):
    	print("%2d. %-*s %f"%(f+1, 30, feat_labels[f], importance[imp_result[f]]) )
    

    这里写图片描述

    特征重要性绘图

    plt.title('Feature Importance')
    plt.bar(range(trainx.shape[1]), importances[indices], color='lightblue', align='center')
    plt.xticks(range(trainx.shape[1]), feat_labels, rotation=90)
    plt.xlim([-1, trainx.shape[1]])
    plt.tight_layout()
    plt.show()
    

    这里写图片描述

    代码参考

    利用随机森林对特征重要性进行评估

    展开全文
  • 利用随机森林特征选择

    万次阅读 2015-08-04 15:27:36
    随机森林提供了两种特征选择的方法:mean decrease impurity和mean decrease accuracy。 平均不纯度减少----mean decrease impurity  随机森林由多个决策树构成。决策树中的每一个节点都是关于某个特征的条件,为...
  • 用随机森林特征选择

    万次阅读 2017-05-14 14:36:33
    - XT|,我们对随机森林中共N颗决策树相同操作,可以得到N个特征X的重要性,取其均值作为X的重要性度量,即D(X) = (D1+D2+......+DN)/N,其中Di = |XT'i - XTi|(i=1,2,3,....,N)。 总结下来,判断一个属性重要...
  • 用select2级联下拉选择

    万次阅读 2017-12-08 17:18:19
    两个下拉框,通过选择年级下拉框进行查询该年级下的所有班级。 可以对select添加onchage事件,监控下拉事件,下拉选择年级,把年级id传入后台查询出该年级下属班级,把班级列表展示到下拉框。 js:$("#grade")....
  • 选择什么引擎ios应用

    千次阅读 2011-05-11 11:41:00
    当然,这两个引擎都是3D的,在目前的app store上,...选择的依据还是在于要的app类型,如果没有太过于复杂的场景,使用图片的叠加就可以完成,那么Cocos2d这类只有代码的引擎即可,自己制作一个简单的关卡编辑器,如
  • 我这个选择题(RadioGroup和RadioButton)答题系统没有标准答案,题目也可,也可以不,但是有的题目是必的,我的起初想法是将可不的记为true存到数组中,把必的记为false。然后通过RadioButton的监听事件...
  • 后台是选择Java 、Go ,还是 PHP?

    千次阅读 2019-05-08 08:00:00
    如果你是前端程序员,想学习后台语言,建议结合自己的项目和公司多去思考一下,前提是学以致用,选择合适的才是重要的。 推荐阅读 Canvas中的裁剪师讲解与实战Android高级UI Android控件人生第一站,小红书任意拖拽...
  • QT之CheckBox单项选择与多项选择

    万次阅读 2016-12-15 21:31:08
    我们在使用CheckBox时,就好比我们做选择题一样,有单项,也有多项选择题。那么,我们QT能不能做到这效果呢,答案是肯定的。怎么做?其实很简单。我们先看看效果图 效果图 这里我们看到的是多选项
  • 选择人工智能:实验的成本低 曹老板清华本科毕业后获得了直博的机会。选择方向时他了一番调查,定了三个候选:经济学、生物智能和人工智能。最后他的裁定标准是:实验的成本。经济学发展缓慢,今天大家还在...
  • 然后用户完后选择提交。 系统判断正确与否,如果没有全部正确,提示用户哪些题错了,让他回去修改 之后全部正确后再重新提交。麻烦各位给个思路 ,只要思路。。。。还要就是想 知道怎么解决分页后之前几页...
  • 参考链接:excel 2016下拉菜单关联怎么“在excel2016中设置联动下拉菜单”的操作步骤是: 1、以Excel 2016为例,打开Excel工作表; 2、在F:H列以一级菜单为标题,二级菜单纵向排列的方式建表; 3、选择一级...
  • 转行IT,有软件开发、技术支持、运营,那么为什么我偏偏选择做软件测试相关工作,这到底不是偶然还是必然? 不断变化的行业现状 在早年,软件测试还属于一个崭新的内容,出现在大家的眼中。而软件测试究竟需要什么...
  • button: ``` ()">上传 <span class="glyphicon glyphicon-open"></span> ``` upload函数: ``` function upload() { ...怎么在upload函数中继续ajax请求,照上面那函数还没选文件就发出请求了
  • 在公司项目规划与组织管理中,通常在项目成立初期遇到的最大问题就是: 选谁项目负责人?公司内有合适人选吗?还是到公司外去招? 如何选择项目负责人?选择的标准或依据有哪些? 基于本人的经验体会同大家...
  • 【web前端】仅使用JS简单的选择题测评系统

    千次阅读 多人点赞 2017-09-03 15:24:51
    说是测评系统,感觉只能算是一个小小的Demo,很水,,没有数据库库,,仅使用JS简单的选择题测评系统 一、设计思路表单封装: 【1】由于采用JS封装提交所以,不需要form标签 【2】放置多个input标签,作为...
  • 了9年硬件电路设计,5年智能手机,4年医疗器械,每次面对别人问起为啥不软件这样的问题,心情很复杂,自己喜爱的工作居然无奈的发展到了这个窘境。 当初选择硬件是因为不想日复一日的坐在屏幕前面敲代码到...
  • 如何用element DateTimePicker实现时分秒的选择控制,只允许在一定时间范围才让选择
  •  那么,有没有一种办法,能让我们实现,一旦选择了哪个单元格,该单元格的所在的行的颜色会发生改变,这样,我们就能直观的看出,数据应该输入到哪行了。 方法/步骤 1 根据
  • 最近公司要对已有的存储服务器进行扩容,扩容大小为100T,新的硬盘要RAID6 1、CTRL+R进入磁盘管理界面 2、F2进入磁盘管理下拉菜单 3、此时本应该选择create new vd选项的,但是发现呈现灰色,无法选中,因为...
  • 根据工作业务需要,要一款自己的推送,在选择协议的时候进行了全面的考察。查阅了很多资料,在这里把查阅的结果对比列表发出来,方便 大家以后进行选择。   DDpush xmpp mqtt ...
  • 在互联网行业,作为一名技术人员,大部分人都有换工作的经历,不过在职业生涯内,换工作的次数也是非常有限的(个人觉得超过2位数就算是比较频繁了),每一次换工作,都算是人生的重大选择,都有可能决定今后的命运...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,482
精华内容 65,792
关键字:

做选择