J-BOX的基本用法

jbox

插件说明

  • jBox 是一款基于 jQuery 的多功能对话框插件,能够实现网站的整体风格效果,给用户一个新的视觉享受。
    运行环境
  • 兼容 IE6+、Firefox、Chrome、Safari、Opera 等主流浏览器。备注:IE不支持边框的圆角样式,不推荐大家使用蛋痛的IE浏览器。

使用方法
Java代码

  <script type="text/javascript" src="jBox/jquery-1.4.2.min.js"></script>  
  <script type="text/javascript" src="jBox/jquery.jBox-2.3.min.js"></script>  
  <script type="text/javascript" src="jBox/i18n/jquery.jBox-zh-CN.js"></script>  
  
  <link type="text/css" rel="stylesheet" href="jBox/Skins/皮肤文件夹/jbox.css"/>  
  // 或  
  <link type="text/css" rel="stylesheet" href="jBox/Skins2/皮肤文件夹/jbox.css"/>  

Java代码

函数原型:
$.jBox(content, options);
    └ 或者 jBox(content, options);
参数说明:

  • content (string,json)
       └ 可以是string或json。当是string时,需要加上前缀标识(html:、id:、get:、post:、iframe:),如果没有加标识,系统会自动加上html:,
    具体请看应用例子。当是json时,表示一个或多个状态,每个状态的默认值为 $.jBox.stateDefaults。
  • options [可选] (json)
       └ 其它参数选项,默认值为 $.jBox.defaults。

备注:如果想手动关闭jBox(不包括下面的tip与messager,它们另有方法),请调用 $.jBox.close(token) 方法。

示例(一):

// 此例省略了前缀html:,前缀标识是不区分大小写的,也可以是HTML:  
var info = 'jQuery jBox<br /><br />版本:v2.0<br />日期:2011-7-24<br />';  
info += '官网:<a target="_blank" href="http://kudystudio.com/jbox">http://kudystudio.com/jbox</a>';  
$.jBox.info(info);  

示例(二):

// 显示id为id-html的div内部html,同时设置了bottomText  
$.jBox('id:id-html', { bottomText: '这是底部文字' });  

这里是id为id-html的div内部html,同时设置了bottomText

示例(三):

// ajax get 页面ajax.html的内容并显示,例如要提交id=1,则地址应该为 ajax.html?id=1,post:前缀的使用与get:的一样  
$.jBox("get:ajax.html");  

示例(四):

// 用iframe显示http://www.baidu.com的内容,并设置了标题、宽与高、按钮  
$.jBox("iframe:http://www.baidu.com", {  
    title: "百度一下",  
    width: 800,  
    height: 350,  
    buttons: { '关闭': true }  
});  

示例(五):

var content = {  
    state1: {  
        content: '状态一',  
        buttons: { '下一步': 1, '取消': 0 },  
        buttonsFocus: 0,  
        submit: function (v, h, f) {  
            if (v == 0) {  
                return true; // close the window  
            }  
            else {  
                $.jBox.nextState(); //go forward  
                // 或 $.jBox.goToState('state2')  
            }  
            return false;  
        }  
    },  
    state2: {  
        content: '状态二,请关闭窗口哇:)',  
        buttons: { '上一步': 1, '取消': 0 },  
        buttonsFocus: 0,  
        submit: function (v, h, f) {  
            if (v == 0) {  
                return true; // close the window  
            } else {  
                $.jBox.prevState() //go back  
                // 或 $.jBox.goToState('state1');  
            }  
  
            return false;  
        }  
    }  
};  
  
$.jBox(content);  

示例(六):

var html = "<div style='padding:10px;'>输入姓名:<input type='text' id='yourname' name='yourname' /></div>";  
var submit = function (v, h, f) {  
    if (f.yourname == '') {  
        $.jBox.tip("请输入您的姓名。", 'error', { focusId: "yourname" }); // 关闭设置 yourname 为焦点  
        return false;  
    }  
  
    $.jBox.tip("你叫:" + f.yourname);  
    //$.jBox.tip("你叫:" + h.find("#yourname").val());  
    //$.jBox.tip("你叫:" + h.find(":input[name='yourname']").val());  
  
    return true;  
};  
  
$.jBox(html, { title: "你叫什么名字?", submit: submit });  

$.jBox.open()
函数原型:
$.jBox.open(content, title, width, height, options);
    └ 或者 jBox.open(content, title, width, height, options);
参数说明:

  • content (string,json)
       └ 可以是string或json。当是string时,需要加上前缀标识(html:、id:、get:、post:、iframe:),如果没有加标识,系统会自动加上html:,具体请看应用例子。当是json时,表示一个或多个状态,每个状态的默认值为 $.jBox.stateDefaults。
  • title [可选] (string)
       └ 窗口标题,值为null时为不显示标题,默认值为 $.jBox.defaults.title。
  • width [可选] (string,number)
       └ 窗口宽度,值为’auto’或具体像素值(例如350),默认值为 $.jBox.defaults.width。
  • height [可选] (string,number)
       └ 窗口高度,值为’auto’或具体像素值(例如100),默认值为 $.jBox.defaults.height。
  • options [可选] (json)
       └ 其它参数选项,默认值为 $.jBox.defaults。

备注:$.jBox.open() 只是 $.jBox() 的一个扩展,方便 title、width、height 参数的传递。

示例(一):

$.jBox.open("iframe:http://www.baidu.com", "百度一下", 800, 350, { buttons: { '关闭': true} });  

示例(二): (content为Json对象,比较复杂一点的例子)

var html1 = '<div class="msg-div">' +  
            '<p>购买数量:</p><div class="field"><input type="text" id="amount" name="amount" value="1" /></div>' +  
            '<p>收货地址:</p><div class="field"><textarea id="address" name="address"></textarea></div>' +  
            '<div class="errorBlock" style="display: none;"></div>' +  
            '</div>';  
  
var html2 = '<div class="msg-div">' +  
            '<p>给卖家留言:</p><div class="field"><textarea id="message" name="message"></textarea></div>' +  
            '</div>';  
  
var data = {};  
var states = {};  
states.state1 = {  
    content: html1,  
    buttons: { '下一步': 1, '取消': 0 },  
    submit: function (v, h, f) {  
        if (v == 0) {  
            return true; // close the window  
        }  
        else {  
            h.find('.errorBlock').hide('fast', function () { $(this).remove(); });  
  
            data.amount = f.amount; //或 h.find('#amount').val();  
            if (data.amount == '' || parseInt(data.amount) < 1) {  
                $('<div class="errorBlock" style="display: none;">请输入购买数量!</div>').prependTo(h).show('fast');  
                return false;  
            }  
            data.address = f.address;  
            if (data.address == '') {  
                $('<div class="errorBlock" style="display: none;">请输入收货地址!</div>').prependTo(h).show('fast');  
                return false;  
            }  
  
            $.jBox.nextState(); //go forward  
            // 或 $.jBox.goToState('state2')  
        }  
  
        return false;  
    }  
};  
states.state2 = {  
    content: html2,  
    buttons: { '上一步': -1, '提交': 1, '取消': 0 },  
    buttonsFocus: 1, // focus on the second button  
    submit: function (v, o, f) {  
        if (v == 0) {  
            return true; // close the window  
        } else if (v == -1) {  
            $.jBox.prevState() //go back  
            // 或 $.jBox.goToState('state1');  
        }  
        else {  
            data.message = f.message;  
  
            // do ajax request here  
            $.jBox.nextState('<div class="msg-div">正在提交...</div>');  
            // 或 $.jBox.goToState('state3', '<div class="msg-div">正在提交...</div>')  
  
            // asume that the ajax is done, than show the result  
            var msg = [];  
            msg.push('<div class="msg-div">');  
            msg.push('<p>下面是提交的数据</p>');  
            for (var p in data) {  
                msg.push('<p>' + p + ':' + data[p] + '</p>');  
            }  
            msg.push('</div>');  
            window.setTimeout(function () { $.jBox.nextState(msg.join('')); }, 2000);  
        }  
  
        return false;  
    }  
};  
states.state3 = {  
    content: '',  
    buttons: {} // no buttons  
};  
states.state4 = {  
    content: '',  
    buttons: { '确定': 0 }  
};  
  
$.jBox.open(states, '提交订单', 450, 'auto');  

$.jBox.prompt()
函数原型:
$.jBox.prompt(content, title, icon, options);
    └ 或者 jBox.prompt(content, title, icon, options);
参数说明:

  • content (string)
       └ 只能是string,不支持前缀标识,默认值为’’。
  • title [可选] (string)
       └ 窗口标题,值为null时为不显示标题,默认值为 $.jBox.defaults.title。
  • icon [可选] (string)
       └ 内容图标,值为’none’时为不显示图标,可选值有’none’、‘info’、‘question’、‘success’、‘warning’、‘error’,默认值为’none’。
  • options [可选] (json)
       └ 其它参数选项,默认值为 $.jBox.defaults。

备注:以下几个方法由 $.jBox.prompt() 扩展而来,参数类似,请看下面的例子。
$.jBox.alert(content, title, options);
    └ 或者 jBox.alert(content, title, options);
$.jBox.info(content, title, options);
    └ 或者 jBox.info(content, title, options);
$.jBox.success(content, title, options);
    └ 或者 jBox.success(content, title, options);
$.jBox.error(content, title, options);
    └ 或者 jBox.error(content, title, options);
$.jBox.confirm(content, title, submit, options);
    └ 或者 jBox.confirm(content, title, submit, options);
$.jBox.warning(content, title, submit, options);
    └ 或者 jBox.warning(content, title, submit, options);
    └ 上面方法中默认按钮的文字设置在 $.jBox.languageDefaults

示例(一):

//加了个其它参数closed  
$.jBox.prompt('Hello jBox', 'jBox', 'info', { closed: function () { alert('prompt is closed.'); } });  

示例(二):

$.jBox.alert('Hello jBox', 'jBox');  

示例(三):

$.jBox.info('Hello jBox', 'jBox');  

示例(四):

$.jBox.success('Hello jBox', 'jBox');

示例(五):

$.jBox.error('Hello jBox', 'jBox');  

示例(六):

var submit = function (v, h, f) {  
    if (v == 'ok')  
        jBox.tip(v, 'info');  
    else if (v == 'cancel')  
        jBox.tip(v, 'info');  
  
    return true; //close  
};  
  
$.jBox.confirm("确定吗?", "提示", submit);  

示例(六02):

    var submit = function (v, h, f) {  
        if (v == true)  
            jBox.tip("恩", 'info');  
        else  
            jBox.tip("好吖", 'info');  
      
        return true;  
    };  

// 自定义按钮  
$.jBox.confirm("天使,做我女朋友吧?", "表白提示", submit, { buttons: { '恩': true, '好吖': false} });  

示例(七):

var submit = function (v, h, f) {  
    if (v == 'yes') {  
        $.jBox.tip('已保存。', 'success');  
    }  
    if (v == 'no') {  
        $.jBox.tip('没保存。');  
    }  
    if (v == 'cancel') {  
        $.jBox.tip('已取消。');  
    }  
  
    return true;  
};  
// 可根据需求仿上例子定义按钮  
$.jBox.warning("内容已修改,是否保存?", "提示", submit);  

$.jBox.tip()
函数原型:
$.jBox.tip(content, icon, options);
    └ 或者 jBox.tip(content, icon, options);
参数说明:

  • content (string)
       └ 只能是string,不支持前缀标识,默认值为’’。
  • icon [可选] (string)
       └ 内容图标,可选值有’info’、‘success’、‘warning’、‘error’、‘loading’,默认值为’info’,当为’loading’时,timeout值会被设置为0,表示不会自动关闭。
  • options [可选] (json)
       └ 其它参数选项,默认值为 $.jBox.tipDefaults。

备注:如果想手动关闭tip,请调用 $.jBox.closeTip() 方法。

示例(一):

$.jBox.tip('Hello jBox');  

示例(二):

//加了个其它参数focusId  
$.jBox.tip('关闭后设置输入框为焦点', 'info', { focusId: 'tip-input' });  

输入框:
示例(三):

//加了个其它参数closed  
$.jBox.tip('关闭后设置输入框为已选择', 'error', { closed: function () { $('#tip-input2').select(); } });  

输入框:
示例(四):

$.jBox.tip("正在XX,你懂的...", 'loading');  
// 模拟2秒后完成操作  
window.setTimeout(function () { $.jBox.tip('XX已完成。', 'success'); }, 2000);  

示例(五):

var submit = function (v, h, f) {  
    if (v == 'ok') {  
        $.jBox.tip("正在删除数据...", 'loading');  
        // 模拟2秒后完成操作  
        window.setTimeout(function () { $.jBox.tip('删除成功。', 'success'); }, 2000);  
    }  
    else if (v == 'cancel') {  
        // 取消  
    }  
  
    return true; //close  
};  
  
$.jBox.confirm("确定要删除数据吗?", "提示", submit);  

$.jBox.messager()
函数原型:
$.jBox.messager(content, title, timeout, options);
    └ 或者 jBox.messager(content, title, timeout, options);
参数说明:

  • content (string)
       └ 只能是string,不支持前缀标识,默认值为’’。
  • title [可选] (string)
       └ 窗口标题,值为null时为不显示标题,默认值为 $.jBox.messagerDefaults.title。
  • timeout [可选] (number)
       └ 显示多少毫秒后自动关闭,如果为0则不自动关闭,默认值为 $.jBox.messagerDefaults.timeout。
  • options [可选] (json)
       └ 其它参数选项,默认值为 $.jBox.messagerDefaults。

备注:如果想手动关闭messager,请调用 $.jBox.closeMessager() 方法。

示例(一):

$.jBox.messager('Hello jBox', 'jBox');  

示例(二):

$.jBox.messager("Hello jBox 2", "my title", null, { width: 350, showType: 'fade' });  

示例(三):

$.jBox.messager("Hello jBox 3", "my title", 3000, {  
    width: 350,  
    icon: 'info',  
    showType: 'show',  
    buttons: { '去看看': true },  
    submit: function (v, h, f) {  
        $.jBox.info('看个蛋蛋?');  
        return true;  
    }  
});  

jBox 其它成员
全局设置:
$.jBox.defaults
$.jBox.stateDefaults
$.jBox.tipDefaults
$.jBox.messagerDefaults
$.jBox.languageDefaults
其它函数:

  • $.jBox.setDefaults(configs);
       └ 设置全局设置,请参考 demo.js 里的使用。
  • $.jBox.getBox();
       └ 获取最前面打开的窗口jQuery对象。
  • $.jBox.getIframe(jBoxId);
       └ 获取最前面打开的或指定ID的窗口里的 iframe jQuery对象。(方便与iframe的交互)
  • $.jBox.getContent();
       └ 获取最前面打开的窗口的内容html。
  • $.jBox.setContent(content);
       └ 设置最前面打开的窗口的内容html。
  • $.jBox.getState(stateNmae);
       └ 获取最前面打开的窗口可见状态内容。(content为多状态下)
  • $.jBox.getStateName();
       └ 获取最前面打开的窗口可见状态的名称。(content为多状态下)
  • $.jBox.goToState(stateName, stateContent);
       └ 显示最前面打开的窗口的指定状态,并可设置状态内容。(content为多状态下)
  • $.jBox.nextState(stateContent);
       └ 显示最前面打开的窗口的下一个状态,并可设置状态内容。(content为多状态下)
  • $.jBox.prevState(stateContent);
       └ 显示最前面打开的窗口的上一个状态,并可设置状态内容。(content为多状态下)
  • $.jBox.close(token);
       └ 关闭最前面打开的窗口,token可以是指定jBox的ID或布尔值,如果是true显示关闭所有已打开的窗口。
  • $.jBox.closeTip();
       └ 关闭提示(由 $.jBox.tip() 打开的)。
  • $.jBox.closeMessager();
       └ 关闭提示(由 $.jBox.messager() 打开的)。

示例(iframe):

// 调父窗口请用 parent 或 top,如果是多层iframe,需要调用多个parent  
var html = "<div style='padding:10px;'>输入点什么:<input type='text' id='some' name='some' /></div>";  
var submit = function (v, h, f) {  
    if (f.some == '') {  
        // f.some 或 h.find('#some').val() 等于 top.$('#some').val()  
        top.$.jBox.tip("请输入点什么。", 'error', { focusId: "some" }); // 关闭设置 some 为焦点  
        return false;  
    }  
    top.$.jBox.info("你输入了:" + f.some);  
  
    return true;  
};
<think>好的,我现在需要确定J-M距离法属于特征选择中的过滤法、包装法还是嵌入法。首先,我需要回顾一下这三种方法的定义和特点,然后分析J-M距离法的原理和应用方式,最后进行归类。 首先,过滤法(Filter Method)的特征选择独立于任何机器学习算法,它们主要依赖于数据本身的统计特性来评估特征的重要性。常见的例子包括卡方检验、信息增益、方差分析等。过滤法通常在模型训练之前进行,计算效率高,但可能忽略特征与模型之间的相互作用。 包装法(Wrapper Method)则使用特定的机器学习模型来评估特征子集的性能,通过不断选择不同的特征子集并训练模型,根据模型的表现来选择最佳特征子集。例如递归特征消除(RFE)和正向选择法。这种方法计算成本较高,但通常能获得更好的模型性能,因为考虑了特征之间的相互作用。 嵌入法(Embedded Method)结合了模型训练和特征选择的过程,特征选择作为模型训练的一部分自动进行。例如Lasso回归中的L1正则化和决策树中的特征重要性评估。嵌入法在模型训练过程中直接进行特征选择,效率介于过滤法和包装法之间。 接下来,我需要了解J-M距离法(Jeffries-Matusita Distance)的基本原理。J-M距离是一种用于衡量两个类别之间可分性的统计量,常用于遥感图像分类和特征选择。它基于类别的概率分布来计算,值越大表示两个类别在该特征上的区分度越高。通常,J-M距离的取值范围在0到2之间,数值越大表示类别间的可分性越好。 J-M距离的计算公式为: $$ JM_{ij} = \sqrt{2(1 - e^{-B_{ij}})} $$ 其中,$B_{ij}$是Bhattacharyya距离,计算公式为: $$ B_{ij} = \frac{1}{8}(\mu_i - \mu_j)^T \left(\frac{\Sigma_i + \Sigma_j}{2}\right)^{-1}(\mu_i - \mu_j) + \frac{1}{2}\ln\left(\frac{|\frac{\Sigma_i + \Sigma_j}{2}|}{\sqrt{|\Sigma_i||\Sigma_j|}}\right) $$ 这里,$\mu_i$$\mu_j$是两类样本的均值向量,$\Sigma_i$$\Sigma_j$是协方差矩阵。 现在,分析J-M距离法的特征选择过程。J-M距离主要用于评估每个特征对区分不同类别的能力,通过计算每一对类别在某个特征上的J-M距离,然后综合这些距离来评估该特征的重要性。通常,特征的重要性可以通过所有类别对的平均J-M距离或最大J-M距离来确定。 根据以上分析,J-M距离法的特征评估基于数据本身的统计分布(如均值和协方差),而不依赖于任何特定的分类模型。它不需要训练模型来评估特征的重要性,因此符合过滤法的定义。此外,J-M距离法在特征选择过程中独立于后续的机器学习模型,属于预处理步骤,计算效率较高,适用于高维数据。 为了验证这一结论,可以对比其他方法。例如,包装法需要反复训练模型来评估特征子集,而J-M距离法无需模型训练,仅通过统计计算即可完成评估。嵌入法则在模型训练过程中进行特征选择,如Lasso回归,而J-M距离法显然不涉及模型训练过程。 因此,可以确定J-M距离法属于过滤法。</think>**J-M距离法(Jeffries-Matusita Distance)属于特征选择中的过滤法(Filter Method)**。以下从原理、对比和应用角度详细说明: --- ### **一、核心原理与过滤法的契合** 1. **统计可分性度量** J-M距离通过**计算类别间概率分布差异**评估特征重要性: - 基于两类样本的均值向量($\mu_i, \mu_j$)和协方差矩阵($\Sigma_i, \Sigma_j$),量化特征对类别区分的贡献; - 值域为$[0, 2]$,值越大表示两类在该特征上越易分离。 *计算公式*: $$JM_{ij} = \sqrt{2(1 - e^{-B_{ij}})}$$ 其中$B_{ij}$为Bhattacharyya距离,包含均值和协方差信息。 2. **模型独立性** J-M距离**无需训练分类模型**,仅依赖数据的统计特性(均值、方差),符合过滤法**与模型无关**的核心特征。 --- ### **二、与其他方法的对比** | **方法类型** | **评估依据** | **是否需要模型** | **计算效率** | **典型场景** | |--------------|------------------------|------------------|--------------|----------------------| | **过滤法** | 统计分布/信息论指标 | 否 | 高 | J-M距离、卡方检验 | | **包装法** | 模型性能反馈 | 是 | 低 | RFE、遗传算法 | | **嵌入法** | 模型内部参数 | 是 | 中 | Lasso、决策树重要性 | *关键区别*: - J-M距离与包装法(如RFE)不同,**不依赖模型迭代训练**; - 与嵌入法(如Lasso)不同,**不通过正则化或模型参数间接筛选特征**,而是直接基于统计分布计算。 --- ### **三、遥感应用示例** 1. **多光谱影像波段优选** 在土地覆盖分类中,计算各波段的J-M距离: - 近红外波段(NIR)可能对区分植被与非植被类别(如水体、裸土)具有高J-M值(接近2); - 短波红外(SWIR)波段对土壤湿度敏感,可能在地表类型细分中表现突出。 2. **时序特征筛选** 在作物分类任务中,对NDVI时序数据提取统计特征(如季节积分、峰值时间),通过J-M距离识别**抽穗期响应速度**等关键时序特征。 --- ### **四、方法特点** - **优点**: - 数学意义明确,物理可解释性强; - 适用于多分类问题(通过平均或最大化多类别对的J-M值); - 对高斯分布数据理论最优。 - **局限**: - 假设特征服从正态分布,实际数据可能偏离此假设; - 未显式处理特征间冗余性(需结合其他方法)。 --- ### **操作建议** 1. **Python实现**(以遥感影像为例): ```python from sklearn.datasets import make_classification import numpy as np # 生成模拟数据(3类,10个特征) X, y = make_classification(n_classes=3, n_features=10, n_informative=5) def jm_distance(X, y, feature_idx): classes = np.unique(y) jm_values = [] for i in range(len(classes)): for j in range(i+1, len(classes)): # 提取两类样本 X_i = X[y == classes[i], feature_idx] X_j = X[y == classes[j], feature_idx] # 计算均值和协方差 mu_i, sigma_i = np.mean(X_i), np.var(X_i) mu_j, sigma_j = np.mean(X_j), np.var(X_j) # 计算Bhattacharyya距离 B = 0.25 * (mu_i - mu_j)**2 / (sigma_i + sigma_j) + 0.5 * np.log((sigma_i + sigma_j)/(2*np.sqrt(sigma_i*sigma_j))) # 计算J-M距离 JM = np.sqrt(2 * (1 - np.exp(-B))) jm_values.append(JM) return np.mean(jm_values) # 返回多类别对的平均J-M值 # 计算第0个特征的J-M距离 print(jm_distance(X, y, feature_idx=0)) ``` 2. **参数优化**: - 对非正态分布数据,可先进行数据变换(如Box-Cox变换); - 高维数据建议先进行预筛选(如方差过滤),再计算J-M距离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值